这里有一个简单的算法问题,关于堆栈和队列,谁能帮我看看我的代码有什么问题?
实现一个有两个堆栈的队列。队列的声明如下。实现它的两个函数appendTail和deleteHead,这两个函数分别执行在队列末尾插入一个整数和在队列头部删除一个整数的功能。(如果队列中没有元素,则deleteHead操作返回-1)text
class CQueue(object):
def __init__(self) -> None:
self.__stackA = []
self.__stackB = []
def appendTail(self, val: int) -> None:
self.__stackA.append(val)
def deleteHead(self) -> int:
if self.__stackB == 0:
if self.__stackA == 0:
return -1
else:
self.__stackB.append(self.__stackA.pop())
return self.__stackB.pop()
else:
return self.__stackB.pop()
代码在上面。我试着把情况分成:1)B = 0,A = 0(返回-1); 2)B = 0,A!= 0(将元素从A转移到B),以及3)B!= 0(直接弹出前面的元素)正确的输入和输出应该是:
输入:["CQueue","appendTail","deleteHead","deleteHead","deleteHead"] [[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
感谢您关注这个问题,如果您能提供帮助,我们将不胜感激。
1条答案
按热度按时间ikfrs5lh1#
有两个问题:
not self.__stackA
或len(self.__stackA) == 0
,或两者的组合。考虑到这两点,你的代码看起来像这样:
你也可以避免一些重复的代码:
**备注:**我希望堆栈是用一个特定的类创建的,因为当你将它们创建为标准列表时,你没有理由用它们做非堆栈的事情,比如反转它们等,这显然是不允许的。