题目:用两个栈来实现一个队列,完成 次在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: n≤100
要求:空间复杂度O(n),时间复杂度O(1)
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node): # 将输入的数据放入栈中
self.stack1.append(node)
def pop(self):
if self.stack1 is not None and self.stack2 is None:
return None
if self.stack2 == []: # 如果不检测stack2的状态,在弹出的时候继续输入数据可能会造成数据的顺序混乱
while self.stack1:# 将stack1中的数据反向弹出
self.stack2.append(self.stack1.pop()) # 将弹出的数据放入stack2中
# print(self.stack2)
return self.stack2.pop() # 将数组再弹出去就形成了队列的样子
例子:输入1,2,3,4,5
stack1 = [1,2,3,4,5]
将stack1弹出并放入stack2中
stack2 = [5,4,3,2,1]
stack2一次弹出1,2,3,4,5
将pop和push包装起来就相当于一个队列
这道题帅啊,太精巧了