почему элемент не добавляется в связанный список? - PullRequest
0 голосов
/ 23 сентября 2019

не получен ожидаемый результат.Отсутствующий узел с data = 6 выглядит как не метод insertAfter должным образом, не могу найти проблему.Просьба предложить любую другую проблему, так как я только начал со структурами данных.Есть ли что-то, что нужно иметь в виду при изучении структур данных.

  class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkeList:
    def __init__(self):
        self.head = None
    def push(self,new_data):
        new_node = Node(new_data)
        new_node.next = self.head
        self.head  = new_node

    def insertAfter(self,prev_node,new_data):
        new_node = Node(new_data)
        if self.head is None:
            self.head = new_node
            return

        new_node.next = prev_node.next
        prev_node.next = new_node

    def append(self,new_data):
        new_node = Node(new_data)
        if self.head is None:
            self.head = new_node
            return
        last = self.head
        while last.next != None:
            last = last.next
        last.next = new_node

    def printList(self):
        temp = self.head
        while temp is not None:
            print(temp.data, end = " ")
            temp = temp.next

if __name__ =='__main__':
    llist = LinkedList()
    llist.append(7)

    llist.append(8)

    llist.push(5)

    llist.insertAfter(Node(5),6)
    llist.printList()

1 Ответ

0 голосов
/ 23 сентября 2019

Таким образом, проблема заключается в этой строке,

llist.insertAfter(Node(5),6)

Когда вы делаете insertAfter, вам нужно сначала получить Node из текущего связанного списка, а скорее то, что вы делаете:, что вы создаете новый узел, а затем передать его.Этот новый узел может иметь то же значение, что и.узел в вашем связанном списке, но на самом деле он не является его частью, что вам нужно сделать следующим образом:

Сначала реализуйте функцию get node, которая получает узел из связанного списка со значением, котороеВы хотите, что-то вроде этого

def getNode(self, value):
    temp = self.head
    while temp is not None:
        if temp.value == value:
            return temp
        else:
            temp = temp.next

    return None

, затем сделайте это.

llist.insertAfter(llist.getNode(5),6)

Также поставьте проверку, если переданный узел не является None в insertAfter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...