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

2021-10-25 08:26:54 字數 1523 閱讀 5419

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

示例:

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

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

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

高階:

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

先遍歷一遍鍊錶,獲得結點總數sum。然後需要刪除的位置就是sum-n+1(假設從1開始計數)。設定乙個哨兵結點,指向head結點,因為會有刪除head結點的情況。結果如下:

//要刪除的位置

p = headnode;

//p重新指向哨兵結點

int i =0;

while

(p) i++

; p = p-

>next;

}return headnode-

>next;}}

;即題目高階描述的:遍歷一次鍊錶。

設定哨兵結點指向head,然後設定兩個指標first和second,分別指向head結點和哨兵結點。首先讓first向前移動n個位置,然後同時移動雙指標,當first指標到達最後的空指標時停止移動,此時second指向的剛好是需要刪除結點的前驅結點,更改其指向即可。

注:沒有做哨兵結點的**。

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class

solution

while

(first)

second-

>next = second-

>next-

>next;

return headnode-

>next;}}

;

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....