leetcode之19刪除連結串列的倒數第N個結點Golang
阿新 • • 發佈:2020-09-10
首先連結串列是單鏈表:
type ListNode struct { Val int Next *ListNode }
那麼假如我們又連結串列1->2->3->4->5
我們需要分如下兩種情況討論
1、刪除的連結串列結點時頭結點,也就是是說N的值是連結串列的長度:
此時直接將頭結點指向他的下一個結點
2、刪除的是中間的結點
那麼我們需要記錄這個被刪除結點的前一個結點
解題思路如下:
首先我們有連結串列的頭結點
我們定義快慢兩個指標(準確說應該是前後兩個指標),這兩個指標的差距就是N
每次快慢指標同時向後前進一步,當快指標到達最後的時候,慢指標就正好處於被刪除結點的前一個結點
然後刪除就可以了
程式碼如下:
func removeNthFromEnd(head *ListNode, n int) *ListNode { fast, slow := head, head // 快指標向後移N步 for i := 0; i < n; i++ { fast = fast.Next } // 如果快指標移到了最後,說明被刪除的結點應該是連結串列的頭結點 if fast == nil { head = head.Next return head } // 將快指標和慢指標同時向後移動,直到快指標移到了連結串列的最後一個結點 for fast.Next != nil { fast = fast.Next slow = slow.Next } // 刪除結點 slow.Next = slow.Next.Next return head }