Dies ist eine LeetCode Frage, ich wusste ihre Lösung, aber wundere mich, warum mein Code nicht funktioniert.Python löscht einen Knoten in der verketteten Liste, gegeben gerade Zugang zu diesem Knoten
AufrufSchreiben Sie eine Funktion zum Löschen eines Knotens (mit Ausnahme des Ends) in einer einfach verknüpften Liste, wenn nur Zugriff auf diesen Knoten besteht.
Vermeintliche die verkettete Liste 1 -> 2 -> 3 -> 4, und Sie sind den dritten Knoten mit dem Wert 3, die verknüpfte Liste soll 1 werden gegeben -> 2 -> 4 nach Ihrer Funktion
Auf den ersten Blick ist meine Intuition wie ein Array löschen:
Verschiebung alle Knoten eine vordere Werte, dann den Schwanz löschen, hier ist meine Implementierung und Testfall:
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)
Aber Nach dem löschen es hat zwei 5-Wert-Knoten, der Schwanz wurde noch gehalten, kann mir bitte jemand erklären, was hier nicht stimmt?
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
Wirklich zu schätzen jede Hilfe.
Ja, du hast Recht, ich habe mehr Arbeit geleistet als nötig, und könntest du meinen Code ansehen, ich glaube, ich habe den Schwanz geputzt, aber der Schwanz hat mich immer noch verwirrt. – XueYu
@ o-o: 'node = None' legt nur den lokalen Namen fest. Die Referenz im vorhergehenden Knoten ist nicht betroffen. –
Hab es, danke. – XueYu