1. 程式人生 > >[leetcode]Python實現-237.刪除連結串列中的節點

[leetcode]Python實現-237.刪除連結串列中的節點

237.刪除連結串列中的節點

描述

請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。
現有一個連結串列 – head = [4,5,1,9],它可以表示為:
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指標指向刪除節點後的指標。 但這道題是單向連結串列,沒法知道前一個節點,所以需要一些奇技淫巧。
因為題目給的是刪除節點,那說明這個節點可以捨棄了,我們把下一個節點的值拷貝給當前要刪除的節點,再刪除下一個節點。
大致過程如下(刪除3):
1->2->3->4->5
1->2->4->4->5
1->2->4->5

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
node.val = node.next.val node.next = node.next.next