1. 程式人生 > 其它 >刪除連結串列中的節點_237

刪除連結串列中的節點_237

LeetCode_237:刪除連結串列中的節點:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/

請編寫一個函式,用於刪除單鏈表中某個特定節點 。在設計函式時需要注意,你無法訪問連結串列的頭節點 head ,只能直接訪問要被刪除的節點 。

題目資料保證需要刪除的節點不是末尾節點 。

/*
解題思路:
    要刪除連結串列中某個節點p:
    1.如果知道該節點的前驅節點s,則直接s.next = s.next.next即可。
    2.如果不知道該節點的前驅,可以通過值的覆蓋實現,
        讓 p.val = p.next.val,然後刪除p.next,
        然後 p.next = p.next.next
*/ class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; } }

劍指 Offer 18. 刪除連結串列的節點: https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/

 給定單向連結串列的頭指標和一個要刪除的節點的值,定義一個函式刪除該節點。【val唯一】

返回刪除後的連結串列的頭節點。

/*
解題思路:
    首先,對head進行初始化判斷。
    1.然後,判斷head值是否為val
        1.1 如果是,則直接返回head.next
        1.2 如果不是,則進行下一步
    2.迴圈判斷head.next值是否為val,
        2.1 迴圈終止條件為head.next 不為空。
        2.2 當head.next == val 時
            2.2.1 刪除head.next,將head.next置空
        2.3當head.next != val 時
            head = head.next;
    3.最後返回head即可。
*/ class Solution { public ListNode deleteNode(ListNode head, int val) { if(head == null) return null; if(head.val == val){ return head.next; } ListNode cur = head; while(cur.next != null) { if(cur.next.val == val){ ListNode deleteNode = cur.next; cur.next = deleteNode.next; deleteNode.next = null; // cur.next = cur.next.next; break; } else{ cur = cur.next; } } return head; } }