題目:
給定一個鏈表,刪除鏈表的倒數第
n 個節點,並且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點后,鏈表變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
解答:
方法一:使用前后指針。前指針先走n步,然后前、后指針同時走,當前指針走到節點尾時,后指針剛好走到要刪除的節點。
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def removeNthFromEnd(self, head: 'ListNode', n: 'int') -> 'ListNode': h = ListNode(0) h.next = head before_node, back_node = h, h for _ in range(n + 1): before_node = before_node.next while before_node != None: before_node = before_node.next back_node = back_node.next back_node.next = back_node.next.next return h.next