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

2022-05-19 07:11:04 字數 1500 閱讀 1045

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

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

示例:

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

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

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

高階:

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

這一題可以用兩種方法來做

我們首先需要知道鍊錶的長度l(鍊錶的元素個數count),然後這個問題就轉換為刪除鍊錶中第l-n+1個節點。第一次遍歷,我們計算出鍊錶的長度;第二次遍歷,我們設定乙個指標,將它移動到待刪除指標的前乙個位置,再執行刪除操作。

有乙個關鍵點就是我們要新建乙個輔助指標,放在煉表頭head的前面,這是為了防止一種特殊情況:被刪除的元素恰好就是第0個元素(即head)。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

count -= n;//第二次遍歷,將指標移動到相應位置

listnode current = assistant;

while (count > 0)

current.next = current.next.next;//刪除操作

return assistant.next; //此處不是return head;

//原因是,head節點可能就是被刪除的那個節點,

//為了避免這種情況,將返回指標設為assistant.next}}

兩次遍歷演算法中,我們只用到了乙個指標。在一次遍歷演算法中,我們要用到兩個指標。同時也需要和剛才一樣,設定乙個輔助指標。

兩個指標的初始位置在輔助指標處(即head的前面乙個),first指標先出發,讓它走n+1步,然後讓second指標出發,這樣,兩個指標之間保持固定的距離n+1,一起移動,直到first指標抵達鍊錶尾部。此時second指標就處於待刪除元素的前乙個元素,我們就可以將它的next指標指向它的下下個節點。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

while (first != null)

second.next = second.next.next;

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