Remove Nth Node From End of List
Question
Given a linked list, remove the nth node from the end of list and return its head.
For 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. Try to do this in one pass.
Tags
- Linked List
- Two Pointers
Thought
Use two pointers algorithm:
- Both of the two pointers are initialized at the dummy node before the head node.
- Move the first pointer N steps.
- Then move two pointers same steps in the while loop until the
nextvariable of the first pointer isnone. Thenextvariable of the second pointer is the node need to be removed.
Code
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
# http://www.cnblogs.com/zuoyuan/p/3701971.html
dummy = ListNode(0)
ptr1 = ptr2 = dummy
dummy.next = head
for i in xrange(n):
ptr1 = ptr1.next
while ptr1.next:
ptr1 = ptr1.next
ptr2 = ptr2.next
ptr2.next = ptr2.next.next
return dummy.next