Basically, I mark each node from the end of the list with indices starting from 0. If the index of one node is equal to n, I know its next node is the node I need to remove. Special case: if n == the length of the linked list, namely, we are asked to remove the head node, make head = head.next. Below is the code in Python.

```
class Solution:
# @return a ListNode
def removeNthFromEnd(self, head, n):
def remove(ptr, n):
if ptr == None:
return -1
index = remove(ptr.next, n)+1
if index == n:
ptr.next = ptr.next.next
return index
index = remove(head, n)
if n > index:
head = head.next
return head
```