'''Given a linked list, remove the n-th node from the end of list and return its head.Example:Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the linked list becomes 1->2->3->5.Note:Given n will always be valid.Follow up:Could you do this in one pass?'''# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = NoneclassSolution(object):defremoveNthFromEnd(self,head,n):""" :type head: ListNode :type n: int :rtype: ListNode """ dummy =ListNode(-217) dummy.next = head fast = dummy slow = dummyfor i inrange(n +1): fast = fast.nextwhile(fast): fast = fast.next slow = slow.next slow.next = slow.next.nextreturn dummy.next
Several things to consider:
We actually need to find the (n + 1)-th node from the end for deleting the n-th node.
How many steps fast should move ahead? n + 1 for either having dummy node or not.
Dummy node is necessary for removing the 1st node (the length-th node from end).