почему я получаю перевернутый двусвязный список?

ПОЧЕМУ Я ПОЛУЧАЮ ОБРАТНЫЙ ВЫВОД ДАННЫХ = (40-> 30-> 20-> 10-> Нет). Пожалуйста, решите ошибку: есть ли другой способ для двусвязного списка?

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

class linkedlist:
    head=None
    tail=None
    def show(self):
        current_node=self.tail
        while current_node is not None:
            print(current_node.data,"-->",end=" ")
            current_node=current_node.prev
        #self.tail.next=self.head
        print(None)

    def append(self,data):
        node=Node(data,None,None)
        if self.head is None:
            self.head=self.tail=node
        else:
            node.prev=self.tail
            self.tail.next=node
        self.tail=node
s=linkedlist()
s.append(10)
s.append(20)
s.append(30)
s.append(40)
s.show()
print("Doubly Linked List Output")


Пожалуйста, устраните эту ошибку


person Aman Madhukar    schedule 24.02.2020    source источник
comment
Вы проходите от хвостового узла, поэтому вы видите, что вывод обратный   -  person rootkonda    schedule 24.02.2020
comment
И что же мне делать   -  person Aman Madhukar    schedule 24.02.2020
comment
Означает, что изменить я должен сделать   -  person Aman Madhukar    schedule 24.02.2020
comment
Ну, пройдите от головы, если вы хотите, чтобы она отображалась как 10,20,30,40. current_node=self.head, а также убедитесь, что вы изменили это на current_node=current_node.tail.next.   -  person rootkonda    schedule 24.02.2020
comment
О, спасибо, приятель, но у меня есть вопрос: в двусвязном списке None печатает?   -  person Aman Madhukar    schedule 24.02.2020
comment
что ты имеешь в виду ? если это значение по умолчанию, которое вы назначаете при создании узла, оно печатается. Поскольку вы довольны комментарием, я опубликую его как ответ.   -  person rootkonda    schedule 24.02.2020


Ответы (2)


Ваш метод show() работает таким образом - он начинается с хвоста и идет к началу списка. Чтобы перейти от головы к хвосту, используйте:

    current_node=self.head 
    while current_node is not None:
        print(current_node.data,"-->",end=" ")
        current_node=current_node.next # NEXT!
person Błotosmętek    schedule 24.02.2020

Пожалуйста, перейдите от головы, если вы хотите, чтобы она отображалась как 10,20,30,40. Вы можете изменить свой метод показа, чтобы начать с

 current_node=self.head 

а также убедитесь, что вы изменили ниже на

 current_node=current_node.next

на каждой итерации.

person rootkonda    schedule 24.02.2020
comment
Объект Error Node не имеет хвоста атрибута - person Aman Madhukar; 24.02.2020
comment
Нет, не работает, я удалил print(None), но вывод выглядит как 10->20->30->40-> - person Aman Madhukar; 24.02.2020
comment
Я должен удалить последний --› - person Aman Madhukar; 24.02.2020
comment
Вы должны напечатать --› при условии, что current_node не равен NONE. Потому что вы печатаете его вместе с данными, поэтому, когда это последний узел, он печатает --›. Вы должны разделить печать current_node.data, а затем, если условие, а затем напечатать --›, если это верно - person rootkonda; 24.02.2020
comment
Могу ли я создать стек, используя связанный список? - person Aman Madhukar; 24.02.2020