題目#
leetcode 237 - Delete Node in a Linked List(題目說明請點連結)
題目簡述#
給定一個鏈表中的某個節點(不是最後一個節點),刪除該節點。
Example 1:

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: 你被給定值為 5 的第二個節點,調用函數後鏈表應該變成 4 -> 1 -> 9。Example 2:

Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: 你被給定值為 1 的第三個節點,調用函數後鏈表應該變成 4 -> 5 -> 9。解題思路#
這題就是實作Linked List 的 Delete Node Function。
例子說明#
head = [4,5,1,9], node = 5
- 初始情況:
4 -> 5 -> 1 -> 9,要刪除節點 5
複製下一個節點的值:
node.val = node.next.val- 節點 5 的值變成 1
- 鏈表變成:
4 -> 1 -> 1 -> 9
跳過下一個節點:
node.next = node.next.next- 節點 5 的 next 指向節點 9
- 鏈表變成:
4 -> 1 -> 9
完成刪除:
- 原本的節點 5 被"覆蓋"為節點 1
- 實際上是將下一個節點的值複製到當前節點,然後跳過下一個節點
完整程式碼#
java
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val; // 將下一個節點的值複製到當前節點
node.next = node.next.next; // 跳過下一個節點,直接指向下下個節點
}
}時間複雜度#
- 時間複雜度:O(1),只需要常數時間操作
- 空間複雜度:O(1),只使用了常數額外空間

