为什么我的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.next
为 None
时该函数停止。这意味着您的最后一个元素不会被打印,因为它的下一个元素是 None
.
总而言之,您对这份清单的逻辑很奇怪,需要大量返工,这会让您更容易发现此类错误。例如,即使您在 deque
对象中同时拥有头部和尾部,但在追加时会遍历整个列表。
这是我的双向链表双端队列 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.next
为 None
时该函数停止。这意味着您的最后一个元素不会被打印,因为它的下一个元素是 None
.
总而言之,您对这份清单的逻辑很奇怪,需要大量返工,这会让您更容易发现此类错误。例如,即使您在 deque
对象中同时拥有头部和尾部,但在追加时会遍历整个列表。