Невозможно удалить узлы из связанного списка, кроме первого узла - PullRequest
0 голосов
/ 27 марта 2020

Я изучаю основы связанных списков, но у меня возникают трудности с удалением узлов. Когда я удаляю первый узел, записывая list1.RemoveNode("Dog"), код успешно возвращает элементы

Cat
Mouse
Rabbit 

Но когда я выполняю команду list1.RemoveNode("Cat"), код не удаляет значение узла "Cat". Вместо этого он по-прежнему печатает все значения узлов следующим образом:

Dog
Cat
Mouse
Rabbit

На самом деле, функция RemoveNode работает только на "Dog". Я не уверен, что не так. Я прикрепил свой код ниже. С нетерпением жду ответа. Спасибо за вашу помощь.

Виктор

class Node():
    def __init__(self,dataval=None):
        self.dataval=dataval
        self.nextval=None

class Linkedlist():
    def __init__(self,headval=None):
        self.headval=headval

    def printlist(self):
        headval=self.headval
        while headval is not None:
            print(headval.dataval)
            headval=headval.nextval

    def RemoveNode(self, Removekey):
        HeadVal = self.headval
        if (HeadVal is not None):
                if (HeadVal.dataval == Removekey):
                    self.headval = HeadVal.nextval
                    HeadVal = None
                    return

        while (HeadVal is not None):
                if HeadVal.dataval == Removekey:
                    break
                prev = HeadVal
                HeadVal = HeadVal.nextval

        if (HeadVal == None):
            return

        prev.next = HeadVal.nextval

        HeadVal = None


Node1=Node("Dog")
Node2=Node("Cat")
Node3=Node("Mouse")
Node4=Node("Rabbit")           
list1=Linkedlist()
list1.headval=Node1
Node1.nextval=Node2
Node2.nextval=Node3
Node3.nextval=Node4
list1.RemoveNode("Cat")
list1.printlist()

1 Ответ

1 голос
/ 27 марта 2020

Эта строка в RemoveNode

prev.next = HeadVal.nextval

должна быть

prev.nextval = HeadVal.nextval
...