快轉到主要內容
leetcode 237 - Delete Node in a Linked List

leetcode 237 - Delete Node in a Linked List

·
類別 
Leetcode
標籤 
Java Leetcode Medium Linked List Problem
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 237 - Delete Node in a Linked List(題目說明請點連結)

題目簡述
#

給定一個鏈表中的某個節點(不是最後一個節點),刪除該節點。


Example 1:

Example1

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

Example 2:

Example2

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
  1. 複製下一個節點的值:

    • node.val = node.next.val
    • 節點 5 的值變成 1
    • 鏈表變成:4 -> 1 -> 1 -> 9
  2. 跳過下一個節點:

    • node.next = node.next.next
    • 節點 5 的 next 指向節點 9
    • 鏈表變成:4 -> 1 -> 9
  3. 完成刪除:

    • 原本的節點 5 被"覆蓋"為節點 1
    • 實際上是將下一個節點的值複製到當前節點,然後跳過下一個節點

完整程式碼
#

java
class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val; // 將下一個節點的值複製到當前節點
        node.next = node.next.next; // 跳過下一個節點,直接指向下下個節點
    }
}

時間複雜度
#

  • 時間複雜度:O(1),只需要常數時間操作
  • 空間複雜度:O(1),只使用了常數額外空間

相關文章

leetcode 2 - Add Two Numbers
類別 
Leetcode
標籤 
Java Leetcode Medium Linked List Problem
leetcode 92 - Reverse Linked List II
類別 
Leetcode
標籤 
Java Leetcode Medium Linked List Problem
leetcode 128 - Longest Consecutive Sequence
類別 
Leetcode
標籤 
Java Leetcode Medium Array Problem Blind75