1. 程式人生 > 實用技巧 >劍指 Offer 18. 刪除連結串列的節點

劍指 Offer 18. 刪除連結串列的節點

描述

給定單向連結串列的頭指標和一個要刪除的節點的值,定義一個函式刪除該節點。
返回刪除後的連結串列的頭節點。

tags: recursive, double pointer

思路

  1. 遞迴
class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        if(head == NULL){
            return head;
        }
        if(head->val == val){
            return head->next;  // val unique
        }
        head->next = deleteNode(head->next, val);
        return head;
    }
};
  1. 遍歷
    利用val node 唯一的性質
class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        if(!head) return head;
        if(head->val == val) return head->next;
        ListNode* node = head;
        // find next.val == val
        while(node->next && node->next->val != val){
            node = node->next;
        }
        // shortcut val node
        if(node) node->next = node->next->next;
        return head;
    }
};