圖解LeetCode刷題計劃
1、寫在前面
手繪漫畫系列正式上線!!!“圖解LeetCode刷題計劃” 來了!!!
今天是第十二期,爭取每天一期,最多兩天一期,歡迎大家監督我。。。
我就是個鴿子。。。
今天的這個題是騰訊面試出過的題,有點動腦筋的意思!
2、題目
首先看一下題目,
可能上來你一看,題出錯了???
彆着急,認真看題!
void deleteNode(ListNode* node)
傳入的是刪除的節點,不是頭結點,加上是單鏈表,沒法找到前驅節點,常規方法無效。
但是我們可以將下一個節點的值複製到當前節點,然後將下一個節點刪除即可。
好了,廢話少說,開始了。
3、正文
好了,來一起看一下。
鏈表是 4, 5, 1, 3,想除去的節點是 5,常規操作,先 get
然後 delete
,這樣就OK了。不過就像前面說過的一樣,傳入的是 node
,所以這裏用的方法是用要刪除節點的下一個位置,去替代要刪除的節點,這樣就完美的解決了問題!
4、代碼
兩種寫法,一種是常規的,一種是C++特有的!
常規的:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
node->val=node->next->val;
node->next=node->next->next;
}
};
C++特有的:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
*(node)=*(node->next);
}
};
如果有幸幫到你,請幫我點個【贊】,給個【關注】!如果能順帶【評論】給個鼓勵,我將不勝感激。
如果想要更多的資源,歡迎關注 @我是管小亮,文字強迫症MAX~