1. 程式人生 > >leetcode 刪除連結串列倒數第n個節點(一次掃描)

leetcode 刪除連結串列倒數第n個節點(一次掃描)

題目描述
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
在這裡插入圖片描述


演算法思想

採用一次掃描的辦法,需要定位到刪除節點的前面的節點
因此指標p往後挪動的個數為n+1次
注意如果p挪動之後,碰到空,說明刪除的是頭結點
使用兩個指標,一個從頭還是挪動,一個從p開始挪動,知道p為空,就找到了前面的指標,之後直接刪除即可


通過程式碼

class Solution:
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
if head == None or n < 1: return None p = head for i in range(n): p = p.next #如果p為None,那麼需要刪除頭結點 if p == None: tempHead = head head = head.next del tempHead return head preNode =
head while p.next: preNode = preNode.next p = p.next deleteNode = preNode.next preNode.next = deleteNode.next del deleteNode return head

執行結果
在這裡插入圖片描述