Leetcode|237.Delete Node in a Linked List刪除連結串列中的節點.java
阿新 • • 發佈:2021-01-02
技術標籤:Leetcodeleetcodejava連結串列資料結構
題目
請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點。傳入函式的唯一引數為 要被刪除的節點 。
現有一個連結串列 – head = [4,5,1,9],它可以表示為:
示例 :
輸入:head = [4,5,1,9], node = 5
輸出:[4,1,9]
解釋:給定你連結串列中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 1 -> 9.
輸入:head = [4,5,1,9], node = 1
輸出:[4,5,9]
解釋:給定你連結串列中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 5 -> 9.
提示:
- 連結串列至少包含兩個節點。
- 連結串列中所有節點的值都是唯一的。
- 給定的節點為非末尾節點並且一定是連結串列中的一個有效節點。
- 不要從你的函式中返回任何結果。
標籤
連結串列;
解題思路
方法一:與下一個節點交換
我們無法訪問我們想要刪除的節點 之前 的節點,我們始終不能修改該節點的 next 指標。相反,我們必須將想要刪除的節點的值替換為它後面節點中的值,然後刪除它之後的節點。
源自:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/shan-chu-lian-biao-zhong-de-jie-dian-by-leetcode/
程式碼
public class Leetcode237_DeleteNodeinaLinkedList {
public static void main(String[] args) {
ListNode head = new ListNode(0);
head.add(1);
head.add(2);
head.add(3);
head.add(4);
head.print();
Leetcode237_DeleteNodeinaLinkedList.deleteNode (head);
System.out.println();
head.print();
}
public static void deleteNode(ListNode node) {
// 因為無法訪問前一個結點,所以可以把要刪除的結點的後一個結點的值前移
node.val = node.next.val;
// 然後刪除掉後一個結點
node.next = node.next.next;
}
}
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/delete-node-in-a-linked-list