圖解LeetCode刷題計劃
1、寫在前面
手繪漫畫系列正式上線!!!“圖解LeetCode刷題計劃” 來了!!!
今天是第十一期,爭取每天一期,最多兩天一期,歡迎大家監督我。。。
我就是個鴿子。。。
開始做鏈表了,昨天發了單鏈表的操作,每日一遍,養成習慣!
2、題目
首先看一下題目,
可能上來你一看,真簡單啊,結果看錯題了,因爲題中說的是倒數第 n
個,傻了吧。
這裏只講一趟掃描實現的過程,即,雙指針做法,好了,廢話少說,開始了。
3、正文
好了,來一起看一下。
首先創建一個虛擬頭結點,和頭結點相連,定義兩個指針。
先讓 first
走 n
個位置,然後兩個指針開始同時運動,這樣兩個指針的間隔固定爲 n
,只要 first
走到尾結點,那麼 second
的下一個位置就是要刪除的節點位置。
刪除節點的操作,比較簡單,指針改變一下就完事了。
最後返回虛擬節點的下一個位置,而不是頭結點,因爲頭結點可能改變,但是虛擬節點一定不變!!!
4、代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
auto fic=new ListNode(0);
fic->next=head;
auto first=fic,second=fic;
while(n--){
first=first->next;
}
while(first->next){
first=first->next;
second=second->next;
}
second->next=second->next->next;
return fic->next;
}
};
如果有幸幫到你,請幫我點個【贊】,給個【關注】!如果能順帶【評論】給個鼓勵,我將不勝感激。
如果想要更多的資源,歡迎關注 @我是管小亮,文字強迫症MAX~