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

2022-08-20 09:12:10 字數 1157 閱讀 6758

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

示例:

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

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

說明:

給定的 n 保證是有效的。

高階:

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

題目鏈結

鍊錶倒數第 n 個節點就是正數的第 len-n 個節點,其中 len 為鍊錶長度。所以,先遍歷鍊錶一遍求長度 len,然後在遍歷到鍊錶的第 len-n 個節點前執行刪除操作。需要注意的是,由於刪除的可能是鍊錶的第乙個節點,所以需要使用乙個新的煉表頭(啞結點)指向原來的鍊錶。**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

curnode->next = curnode->next->next;

return dummyhead->next;

}int getlen(listnode* head)

return len;

}};

使用兩個指標 p1, p2. p1 和 p2 初始都指向啞結點 dummyhead,然後 p2 先走 n 步,然後 p1 和 p2 共同往後走,當 p2->next==nullptr 時停止移動兩個指標,此時 p1->next 就是倒數第 n 個節點。**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

p1->next = p1->next->next;

return dummyhead->next;

}};

這個問題的難點在於不好確定應該移動幾步,例如思路 2 中,p2 是先移動 n 步,還是 n-1 步或者 n+1 步。遇到這種問題,可以在紙上畫出來分析一下,可以很快得出答案。

LeetCode 刪除鍊錶的結點

github 編寫乙個函式,在給定單鏈表乙個結點 非尾結點 的情況下,刪除該結點。假設該鍊錶為1 2 3 4並且給定你鍊錶中第三個值為3的節點,在呼叫你的函式後,該鍊錶應變為1 2 4。很簡單的一道題,因為給定了將要被刪除的節點,而單向鍊錶又無法回溯,因此可以將下乙個節點刪除,並將值賦給要被刪除的節...

Leetcode 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...