medium!
題目描述:
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。
示例:
給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.說明:當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
給定的 n 保證是有效的。
高階:你能嘗試使用一趟掃瞄實現嗎?
解題思路:
這道題讓我們移除鍊錶倒數第n個節點,限定n一定是有效的,即n不會大於鍊錶中的元素總數。還有題目要求我們一次遍歷解決問題,那麼就得想些比較巧妙的方法了。比如我們首先要考慮的是,如何找到倒數第n個節點,由於只允許一次遍歷,所以不能用一次完整的遍歷來統計鍊錶中元素的個數,而是遍歷到對應位置就應該移除了。那麼我們需要用兩個指標來幫助我們解題,pre和cur指標。首先cur指標先向前走n步,如果此時cur指向空,說明n為鍊錶的長度,則需要移除的為首元素,此時返回head->next即可,如果cur存在,再繼續往下走,此時pre指標也跟著走,直到cur為最後乙個元素時停止,此時pre指向要移除元素的前乙個元素,再修改指標跳過需要移除的元素即可。
c++**:
1class
solution
12 pre->next = pre->next->next;
13return
head;14}
15 };
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 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?兩次遍歷的演算法思路 第一遍歷從頭結點開始來計算鍊錶的長度,然後...