【发布时间】:2017-05-29 05:35:47
【问题描述】:
class Queue:
def __init__(self):
self._contents = []
def enqueue(self, obj):
self._contents.append(obj)
def dequeue(self):
return self._contents.pop(0)
def is_empty(self):
return self._contents == []
class remove_2nd(Queue):
def dequeue(self):
first_item = Queue.dequeue(self)
# Condition if the queue length isn't greater than two
if self.is_empty():
return first_item
else:
# Second item to return
second_item = Queue.dequeue(self)
# Add back the first item to the queue (stuck here)
remove_2nd 类基本上是一个队列,除非队列的长度大于 2,然后在每次出队时删除第 2 个项目。如果不是,那么您将执行与普通队列相同的操作。我只被允许使用队列中的方法来完成 remove_2nd。
我的算法:
如果队列大于两个:
假设我的队列是 1 2 3 4
我会先删除第一项,这样它就变成了
2 3 4
然后我会删除第二个项目,这将是返回值,那么它将是
3 4
然后我会根据需要添加回第一项
1 3 4
问题是,我不知道如何添加回来。 Enqueue 把它放在最后,所以基本上它会是 3 4 1。我正在考虑反转 3 4,但我也不知道该怎么做。有什么帮助吗?
只想指出,我不允许调用 _contents 或为 remove_2nd 类创建我自己的私有变量。这应该严格使用队列 adt 来完成
【问题讨论】: