首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 237 Delete Node in a Linked List:只給節點指針刪除節點

     編輯:關於C++

題目回顧

給定單鏈表中非尾節點的指針,刪除該節點。無法訪問頭節點。
例:1→2→3→4,給節點 3,刪除後 1→2→4

核心技巧:值拷貝 + 刪除下一個

因無法訪問前驅,無法直接 pre->next = node->next。
改為:將下一個節點的值拷貝到當前節點,然後刪除下一個節點。

代碼

class Solution {
public:
    void deleteNode(ListNode* node) {
        if (!node || !node->next) return; // 題目保證非尾節點
        ListNode* tmp = node->next;
        node->val = tmp->val;
        node->next = tmp->next;
        delete tmp;
    }
};

關鍵點

  • 實際刪除的是「下一個節點」,但效果等同於刪除「當前節點」
  • 題目保證給定節點非尾節點,否則無法操作
  • 此法修改了數據值,若外部持有節點指針觀察值會發現變化(但題目不考慮此語義)

複雜度

  • 時間:O(1)
  • 空間:O(1)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved