19 刪除鍊錶的倒數第N個節點

2021-09-25 01:30:33 字數 1272 閱讀 4373

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.

說明:給定的 n 保證是有效的。

高階:你能嘗試使用一趟掃瞄實現嗎?

分析:若不要求一趟,則可以遍歷兩次解決

要求一趟,可以通過hash記錄id和指標,遍歷完最後直接通過id找對應指標,修改鍊錶

用兩個指標,乙個指標先走n步,接著同時走,當第乙個指標走到尾部時,第二個指標所在位置就到目標位置了。

/*

執行用時 :0 ms, 在所有 go 提交中擊敗了100.00%的使用者

記憶體消耗 :2.2 mb, 在所有 go 提交中擊敗了97.93%的使用者

*/func

removenthfromend

(head *listnode, n int

)*listnode

p:=&dump

q:=&dump

for i:=

0;i<=n;i++

for p!=

nil q.next=q.next.next

return dump.next

}

/*

執行用時 :0 ms, 在所有 go 提交中擊敗了100.00%的使用者

記憶體消耗 :2.3 mb, 在所有 go 提交中擊敗了6.22%的使用者

*/package main

import

"fmt"

type listnode struct

func

removenthfromend

(head *listnode, n int

)*listnode

}if n==c

else

return head

}func

main()

h2:=listnode

h3:=listnode

h4:=listnode

h5:=listnode

h1.next=

&h2;h2.next=

&h3;h3.next=

&h4;h4.next=

&h5 h:=

removenthfromend

(&h1,5)

for h!=

nil fmt.

println()

}

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?說實話,就我的水平而言感覺這道題坑點還真不少,先來我的乙個粗糙版...

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?class solution def removenthfrom...

19 刪除鍊錶的倒數第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第n個節點,並且返回鍊錶的頭結點。給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.給定的n保證是有效的。首先遍歷得出鍊錶的長度l,然後刪除第l n個節點 definition for singly linked list....