這是一個LeetCode問題,我知道它的解決方案,但想知道爲什麼我的代碼不工作。Python刪除鏈接列表中的節點,只需訪問該節點
編寫一個函數來刪除單向鏈表中的一個節點(尾部除外),只給予該節點的訪問權限。
應該鏈表是1 - > 2 - > 3 - > 4,你是給出值3的第三個節點,鏈表應該成爲1 - > 2 - 呼喚你的函數後> 4
乍一看,我intution是刪除就像一個數組:
轉移所有的節點值一個正面,然後刪除尾部,這裏是我的實現和測試案例:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
def deleteNode(node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
while node.next:
node.val = node.next.val
node = node.next
node = None
deleteNode(node4)
但刪除後,有兩個5值節點,尾巴仍然保留,任何人都可以向我解釋這裏有什麼問題嗎?
deleteNode(node4)
node1.val
Out[162]: 1
node1.next.val
Out[163]: 2
node1.next.next.val
Out[164]: 3
node1.next.next.next.val
Out[165]: 5
node1.next.next.next.next.val
Out[166]: 5
真的很感謝任何幫助。
是的,你是對的,我做了比需要更多的工作,你能看看我的代碼,我認爲我清理了尾巴,但尾巴仍然讓我困惑。 – XueYu
@ o-o:'node = None'只設置本地名稱。前面節點中的引用不受影響。 –
明白了,謝謝。 – XueYu