示例:
給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.說明:當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
給定的 n 保證是有效的。高階:
你能嘗試使用一趟掃瞄實現嗎?
題解:紀念下第一次做到關於列表的題目,其實這個概念不是很熟悉,一直很抽象,做完這道題之後心中大概有了個把握。
鍊錶這裡其實就是多個字典組合,而這個字典的next
指向的是下乙個node(字典)
:
}}
表示:1->2->3
的列表
思路1:先遍歷一遍,得到列表長度
在遍歷到需要刪除節點的上乙個節點,將該節點的next
指向下個節點的next
(即跳過需要刪除的節點)
思路2:一次遍歷,設定雙指標,指標保持n-1的間隔,同時移動兩個指標,當右指標到達末尾,左指標的下乙個node就是需要刪除的node,將左指標的next指向下個節點的next即可。
注意:為應對刪除頭節點的情況,我們在原本鍊錶中加乙個頭,詳細見**:
# 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:
## 採用雙指標的思想可以達到一次遍歷
# 左右指標保持n+1的距離,當右指標到頭時,左指標的下一位就是需要刪除的節點
dump=listnode(0)
# 給鍊錶加頭,應對刪除第乙個節點的特殊情況發生
dump.
next
=head
right=dump
left=dump
val=
0while
(val: val+=
1 right=right.
next
# 右指標先移動n+1次
while
(right!=
none):
# 同時移動
left=left.
next
right=right.
next
left.
next
=left.
next
.next
# 左指標跳過下乙個node
return dump.
next
# 跳過我們之前新增的頭
LeetCode鍊錶 19刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?我採取一次掃瞄來實現。1.定義兩個指標,令他們相隔n的距離,則前...
鍊錶 LeetCode19刪除鍊錶中的第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?分析 看到這個問題,第一反應,先求長度,再找節點,看一下高階,有...
19 反轉鍊錶
傳送門 程式設計師面試題精選100題 19 反轉鍊錶 資料結構 題目 輸入乙個鍊錶的頭結點,反轉該鍊錶,並返回反轉後鍊錶的頭結點。鍊錶結點定義如下 struct listnode 分析 可以將鍊錶表示為如下形式 逆置操作相當於每次操作pcur節點,並將其next指向ppre,這樣直到鍊錶尾。個人實現...