【发布时间】:2017-09-30 16:40:05
【问题描述】:
(我搜索了 2 个多小时的解决方案,但找不到任何我需要的示例代码)
大家好,我创建了一个 Queue 类和一个继承 Queue 的 Deque 类。我用来构建这些结构的 Node 类初始化为 2 个字段:item 和 next。
我试图让我的 Deque 类在 O(1) 时间内从两端出列,但我的问题是下一个指针只指向一个方向。我可以通过将 next 指针设置为我创建的 new_node 轻松地将项目添加到 Deque 的末尾,并且我可以通过将 Deque 的头部设置为我的 new_node 来轻松地将项目添加到前面,然后说下一个项目是老头。
我什至可以通过说 head = head.next 轻松地从前面删除项目
我的问题:我无法从 Deque 的 REAR 中删除项目,因为如果我删除它,我最后的指针将指向任何内容。我不能说 tail = tail.next,因为那没有任何意义。
我不知道我怎么会遇到这样一个看似简单的问题,但我终其一生都无法弄清楚该怎么做。
我错过了什么/没有考虑到什么??
我的问题代码位于我所提供内容的最底部,但如果您想阅读其余部分,请随意阅读!
class Node:
def __init__(self, value):
self.item = value
self.next = None
def get_value(self):
return self.item
def set_value(self, value):
self.item = value
def get_next(self):
return self.next
def set_next(self, other_node):
self.next = other_node
class Queue:
def __init__(self):
self.size = 0
self.head = None
self.tail = None
def is_empty(self):
if self.size == 0:
return True
else:
return False
def peek(self):
return self.head.item
def enqueue(self, value):
new_node = Node(value)
if self.isEmpty():
self.tail = new_node
self.head = self.tail
self.size += 1
else:
self.tail.next = new_node
self.tail = new_node
self.size += 1
def dequeue(self):
if self.is_empty():
raise IndexError('Can not dequeue from an empty queue')
else:
value = self.head.item
self.head = self.head.next
self.size -= 1
return value
def printout(self):
if self.is_empty():
return 'Queue is empty'
else:
temp = self.head
while temp is not self.tail:
print('[ {} ] -> '.format(temp.item), end='')
temp = temp.next
print('[ {} ]'.format(self.tail.item))
class Deque(Queue):
def __init__(self):
super().__init__()
def peek_back(self):
return self.tail.item
def enqueue_front(self, value):
new_node = Node(value)
if self.is_empty():
self.head = new_node
self.tail = self.head
self.size += 1
else:
temp = self.head
self.head = new_node
self.head.next = temp
self.size += 1
def dequeue_back(self):
if self.is_empty():
raise IndexError
# ??????
# ??????
【问题讨论】:
-
您是否考虑在您的
Node类中添加一个self.previous变量来指向前面的节点(如果有的话)? -
是的,这绝对是一个选项,但我想知道是否有一种方法可以仅使用 next 指针和 Queue 类中提供的内容。基本上是在不修改我的 Node 类的情况下让它工作
-
您如何使用与原始队列具有相同元素但被翻转的单独队列(即原始队列中的第一个元素将成为最后一个元素,但其
self.next将指向任何内容,原始队列中的第二个元素将成为倒数第二个元素,其self.next指向现在的最后一个元素,依此类推)以跟踪原始队列中每个元素的前一个元素是什么?如果不清楚,请告诉我。 -
非常有趣。感谢您的回复肖恩!
标签: python python-3.x linked-list queue deque