class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
if head is None:
return head
if n == 0:
return head
# 经典的地方在于这里, 创造的一个头结点. 这样就避免了很多极端的情况,
# 比如只有一个节点,然后删除最后一个的情况.(典型的没有条件,创造条件也要上)
dummy = ListNode(0)
slow = dummy
fast = dummy
dummy.next = head
# 这里的n+1次移动 你自己画个图就一目了然.要删除最后一个,fast指针要先移动2次,然后fast和
# slow再同时移动才可以.
for i in range(n+1):
if fast is not None:
fast = fast.next
else:
dummy.next = dummy.next.next
return dummy.next
while fast is not None:
slow = slow.next
fast = fast.next
slow.next = slow.next.next
return dummy.next