class ListNode():
def __init__(self, x):
self.val = x
self.next = None
class Solution():
def removeNthFromEnd(self, head, n):
slow = fast = dummy = ListNode(0)
dummy.next = head
while n:
fast, n = fast.next, n-1
while fast.next:
slow, fast = slow.next, fast.next
slow.next = slow.next.next
return dummy.next
if __name__ == "__main__":
head, head.next, head.next.next, head.next.next.next, head.next.next.next.next \
= ListNode(1), ListNode(2), ListNode(3), ListNode(4), ListNode(5)
result = Solution().removeNthFromEnd(head, 2)
assert '{0}->{1}->{2}->{3}'.format(result.val, result.next.val, result.next.next.val, result.next.next.next.val) \
== '1->2->3->5'