我想请问一下,在用两个栈实现队列题目中,以下代码哪里出了问题?以下是问题描述和代码
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例:
输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
(源自:https://leetcode.cn/leetbook/read/illustration-of-algorithm/5d3i87/)
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()
在代码中,判断栈是否为空的语句应该使用 if not self.__stackA
和 if not self.__stackB
,而不是 if self.__stackA == 0
和 if self.__stackB == 0
。因为栈是一个列表,当它为空时,它的布尔值为 False,不为空时为 True。另外,在 deleteHead
方法中,当 self.__stackB
不为空时,应该直接返回 self.__stackB.pop()
,而不是先将它的值赋给一个变量再返回。修改后的代码如下:
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 not self.__stackB:
if not self.__stackA:
return -1
else:
while self.__stackA:
self.__stackB.append(self.__stackA.pop())
return self.__stackB.pop()
else:
return self.__stackB.pop()