为什么我的python双向链表中最新的"append"没有作用?

Why does the latest "append" in my python doubly linked list have no effect?

这是我的双向链表双端队列 python 代码的一部分。

和'append'函数写得差不多的'appendleft'函数,正常输出。为什么最后的'append('apple')'代码在'Group_of_append'函数中没有正常输出?

class Node:

    def __init__(self,item,prev,next):

        self.item = item
        self.prev = prev
        self.next = next

class deque:

    def __init__(self,name):

        self.name = name
        self.head = Node(None,None,None)
        self.tail = Node(None,self.head,None)

        self.head.next = self.tail
        self.size = 0

    def append(self,item):
        current = self.head
        new_node = Node(item,None,None)
        while current.next != None:
            current = current.next
        current.next = new_node
        new_node.prev = current
        self.tail = new_node
        self.size += 1
        return
    
    def appendleft(self,item):
        current = self.tail
        new_node = Node(item,None,None)
        while current.prev != None:
            current = current.prev
        current.prev = new_node
        new_node.next = current
        self.head = new_node
        self.size += 1
        return

    def print_list(self): 

        p = self.head

        while p.next != None:
            if p.item == None:
                pass
            else:
                print(p.item,end=' ')
            
            p = p.next

    def Group_of_append(self):
        print('Group_of_append')
        self.append('graphe')
        self.append('cherry')
        self.append('apple')
        self.appendleft('watermelon')
        self.appendleft('strawberry')
        self.print_list()
        print(" ")

deq = deque('name')
deq.Group_of_append()

结果是

strawberry watermelon graphe cherry

Group_of_append、self.append('apple') 上的最后附加代码无效。

在定义'append'函数的时候,以为再多一个size不够就没有输出了。

所以,我改变了 'append' deque 上的函数,像这样

    def append(self,item):
        self.size += 1
        current = self.head
        new_node = Node(item,None,None)
        while current.next != None:
            current = current.next
        current.next = new_node
        new_node.prev = current
        self.tail = new_node
        self.size += 1
        return

但结果是一样的(最新的'append'函数仍然没有打印任何东西)

strawberry watermelon graphe cherry

您的附加工作正常。问题在于您的 print_list 函数,当 p.nextNone 时该函数停止。这意味着您的最后一个元素不会被打印,因为它的下一个元素是 None.

总而言之,您对这份清单的逻辑很奇怪,需要大量返工,这会让您更容易发现此类错误。例如,即使您在 deque 对象中同时拥有头部和尾部,但在追加时会遍历整个列表。