Statement L->tail++ is also not allowed because L is a constant list. But it is very strange. It tries to make L->tail point to the ListCell in memory that comes immediately after the current value of L->tail. That makes no sense. What makes you think that list cell has any meaning or even belongs to the program?
Incorrect. Ignoring the misspelling of "successors", statement successor(L) ignores the result returned by successors.