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

2021-10-18 22:48:15 字數 3129 閱讀 7897

題目鏈結

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

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

示例 1:

輸入:head =[1

,2,3

,4,5

], n =

2輸出:[1,

2,3,

5]

示例 2:

輸入:head =[1

], n =

1輸出:[

]

示例 3:

輸入:head =[1

,2], n =

1輸出:[

#l為鍊錶長度

current = head

l =0while current:

current = current.

next

l+=1

dummy = listnode(

0,head)

current = dummy

for _ in

range(0

,l-n)

: current = current.

next

current.

next

= current.

next

.next

return dummy.

next

我們也可以在遍歷鍊錶的同時將所有節點依次入棧。根據棧「先進後出」的原則,我們彈出棧的第 nn 個節點就是需要刪除的節點,並且目前棧頂的節點就是待刪除節點的前驅節點。這樣一來,刪除操作就變得十分方便了。

python解法

class

solution

:def

removenthfromend

(self, head: listnode, n:

int)

-> listnode:

dummy = listnode(

0, head)

stack =

list()

cur = dummy

while cur:

cur = cur.

next

for i in

range

(n):

stack.pop(

) prev = stack[-1

] prev.

next

= prev.

next

.next

return dummy.

next

c++解法

python解法

class

solution

:def

removenthfromend

(self, head: listnode, n:

int)

-> listnode:

dummy = listnode(

0,head)

first = head

second = dummy

for _ in

range

(n):

first = first.

next

while first:

second = second.

next

first = first.

next

second.

next

= second.

next

.next

return dummy.

next

c++解法

class

solution

while

(fast)

slow->next=slow->next->next;

return dummy->next;}}

;

因為要刪除的節點,只有知道前乙個節點才能把它刪除,因此first和second之間要有n個節

LeetCode 19 鍊錶(160)

1 如圖,鍊錶是一種非常常用的資料結構 煉表頭 指向第乙個鍊錶結點的指標 鍊錶結點 鍊錶中的每乙個元素,包括 1 當前結點的資料,2 下乙個結點的位址 鍊錶尾 不再指向其他結點的結點,其位址部分放乙個null,表示鍊錶到此結束。2 鍊錶可以動態地建立 動態地申請記憶體空間 int pint new ...

鍊錶 LeetCode19刪除鍊錶中的第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?分析 看到這個問題,第一反應,先求長度,再找節點,看一下高階,有...

Leetcode 19 刪除鍊錶的第N個節點

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?兩次遍歷的演算法思路 第一遍歷從頭結點開始來計算鍊錶的長度,然後...