Wenn Sie den Knoten linkedList auf None setzen, wird der übergeordnete Link nicht gelöscht
In meiner linkedList habe ich die Löschmethode wie folgt implementiert.
def remove(self,key):
if self.head is None:
return
z = self.head
while (z.key != key and z.next is not None):
z = z.next
if (z.key == key):
if z.next is None:
z = None
else:
z.key = z.next.key
z.value = z.next.value
z.next = z.next.next
self.size -= 1
Das Problem, auf das ich stoße, ist, dass wenn der Knoten z keinen nächsten hat, er auf keinen gesetzt ist. Aber der folgende Code
w = LinkedList("A",5)
w.append("B", 7)
w.append("C",10)
w.remove("C")
wird am Ende ausgedruckt A, B, C
. Das erwartete Verhalten hier wäre, dass A und B gedruckt werden. Warum setzt z auf none und nicht die übergeordnete Knotenreferenz dieses Knotens auf none as welL?
Ihre Löschmethode ist falsch. Das Festlegen der Werte des aktuellen Knotens mit den Werten des nächsten Knotens würde nicht funktionieren (es würde den nächsten Knoten duplizieren).
Das Festlegen der z
lokalen Variablen auf None
würde sich auch nicht auf die tatsächliche verknüpfte Liste auswirken.
Was Sie zum Löschen tun müssen, ist zu iterieren, bis der Knoten, dessen nächster Knoten denselben hat, key
und der Knoten, der der nächste ist, so eingestellt ist, dass er auf den nächsten Knoten zeigt. Beispiel -
def remove(self,key):
if self.head is None:
return
if self.head.key == key:
self.head = self.head.next
return
z = self.head
while z.next is not None and z.next.key != key:
z = z.next
if (z.next.key == key):
z.next = z.next.next
self.size -= 1