題目: 刪除鍊錶的倒數第n個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。
示例:
給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.說明:給定的 n 保證是有效的。當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
高階:你能嘗試使用一趟掃瞄實現嗎?
問題分析:題目挺好理解,既然是找倒數第n個刪,又是乙個單鏈表,必須把倒數轉成正數,才能找到刪,要轉先得遍歷一遍找元素個數,再遍歷找到元素刪除。兩趟遍歷,但題目要求一次遍歷。所以還是用雙指標法。
解題思路:對於鍊錶,要刪除乙個元素,就是找到該元素的前乙個結點,斷開與該元素的聯絡,題目中給出的n其實也就是要刪除數的前乙個,與最後乙個元素的差值。可以設定兩個指標right和left,初始兩指標都在頭結點,將right指標向後移n,兩指標有了差值,再將兩指標同時向後移,right移動到最後乙個元素時,left移動到要刪除的元素的前乙個元素。
**實現:
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
listnode right=head;
listnode left=head;
for(
int i=
0;iwhile
(right.next!=null)
left.next=left.next.next;
//刪除元素
return head;
//返回頭
}}
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 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?兩次遍歷的演算法思路 第一遍歷從頭結點開始來計算鍊錶的長度,然後...