Remove Nth Node From End of List
Question
- leetcode: (19) Remove Nth Node From End of List
- lintcode: (174) Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.
Note
The minimum number of nodes in list is n.
Example
Given linked list: 1->2->3->4->5->null, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5->null.
Challenge
O(n) time
题解
简单题,
使用快慢指针解决此题,需要注意最后删除的是否为头节点。让快指针先走n
步,直至快指针走到终点,找到需要删除节点之前的一个节点,改变node->next
域即可。
class Solution(object):
'''
题意:删除链表中倒数第n个结点,尽量只扫描一遍。
使用两个指针扫描,当第一个指针扫描到第N个结点后,
第二个指针从表头与第一个指针同时向后移动,
当第一个指针指向空节点时,另一个指针就指向倒数第n个结点了
'''
def removeNthFromEnd(self, head, n):
res = ListNode(0)
res.next = head
tmp = res
for i in range(0, n):
head = head.next
while head != None:
head = head.next
tmp = tmp.next
tmp.next = tmp.next.next
return res.next
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @return a ListNode
def removeNthFromEnd(self, head, n):
dummy=ListNode(0); dummy.next=head
p1=p2=dummy
for i in range(n): p1=p1.next
while p1.next:
p1=p1.next; p2=p2.next
p2.next=p2.next.next
return dummy.next