刪除連結串列中的節點_237
阿新 • • 發佈:2022-04-12
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; } }