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

2021-10-01 11:49:11 字數 1657 閱讀 8067

示例:

給定乙個鍊錶: 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,這樣直到鍊錶尾。個人實現...