題目描述
實現一種算法,刪除單向鏈表中間的某個節點(即不是第一個或最後一個節點),假定你只能訪問該節點。
解題思路
題目裏“假定你只能訪問該節點”容易迷惑人,leetcode題解區的理解是:你不知道head節點是什麼 所以沒有辦法像其他處理鏈表的題解一樣 從head開始訪問一路記下來每個節點的前一個節點,只能直接訪問到他想要刪除的節點和想要刪除的節點後面的所有節點,所以我們需要像上面我寫的這個方法一樣操作要被刪除的節點本身。
按照這個理解就比較容易了。具體做法就是將該節點的值複製爲下一個節點的值,然後跳過下一個節點,實際上是將下一個節點複製過來了,然後刪除的是下一個節點。
python3 實現
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
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