Wenn Sie den Knoten linkedList auf None setzen, wird der übergeordnete Link nicht gelöscht


TheM00s3

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?

Anand S Kumar

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 zlokalen Variablen auf Nonewü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, keyund 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 

Verwandte Artikel