题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例
示例1
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:
[null,null,3,-1]
示例2
输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:
[null,-1,null,null,5,2]
关键思路
队列为先进先出,栈为先进后出。
第一个栈用于维护在队列尾部插入整数的功能,也就是说将整数压入栈顶。第一个栈可以直接表示当前队列。
第二个栈用于维护在队列头部删除整数的功能,也就是当第一个栈需要删除栈底元素时,第二个栈将被用于存放第一个栈按顺序弹出的其他整数。
代码实现
class CQueue(object):
def __init__(self):
self.stack1 = [] # represent for the queue, and for appending operation
self.stack2 = [] # for deleting operation
def appendTail(self, value):
"""
:type value: int
:rtype: None
"""
self.stack1.append(value)
return None
def deleteHead(self):
"""
:rtype: int
"""
if len(self.stack1) == 0:
return -1
for i in range(len(self.stack1)-1): # pop elements except the head
self.stack2.append(self.stack1.pop())
del_value = self.stack1.pop() # delete the element in the head
for j in range(len(self.stack2)): # restore
self.stack1.append(self.stack2.pop())
return del_value
# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()
if __name__ == "__main__":
ins = input()
value = input()
result = []
param_1, param_2 = 0, 0
for k in ins:
if k == "CQueue":
obj = CQueue()
result.append(None)
elif k == "appendTail":
param_1 = obj.appendTail(value[ins.index(k)][0])
result.append(param_1)
elif k == "deleteHead":
param_2 = obj.deleteHead()
result.append(param_2)
print(result)
运行结果
[None, None, 3, -1]
[None, -1, None, None, 5, 2]
链接
https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof