原題:
請編寫一個函數,使其可以刪除某個鏈表中給定的(非末尾)節點,你將只被給定要求被刪除的節點。
現有一個鏈表 -- head = [4,5,1,9],它可以表示爲:
解法一:
其實這個題目並不難,主要是容易固定思維,導致題意理解錯。比如我一開始認爲這題目應該告訴我首節點head,同時題目刪除的時候應該刪除node這個鏈表的首節點的地址而不是val值。而實際的題目意思是刪除原鏈表中node.val這個節點,說的更直白一點就是你把這個node.val值刪除就可以了,不一定要刪除node這個節點。
接下來我們思考,單鏈表是隻能向後遍歷的,無法向前,也就是說告訴我了node這個節點,我現在想刪除node這個節點很簡單,但是問題是node.next應當接上哪個節點???
所以我們的思路是將node.next.val保留在node.val上,刪除node.next這個節點。
代碼如下:
# 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