[编程题]用两个栈实现队列
论文问答
1
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: n≤1000n\le1000 n ≤ 1 0 0 0
要求:存储n个元素的空间复杂度为 O(n)O(n) O ( n ) ,插入与删除的时间复杂度都是 O(1)O(1) O ( 1 )
示例1
输入
["PSH1","PSH2","POP","POP"]
输出
1,2
说明
"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2
示例2
输入
["PSH2","POP","PSH1","POP"]
输出
2,1
-
思路:
- 栈A用来作入队列
- 栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列)
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stackA = [] self.stackB = [] def push(self, node): # write code here self.stackA.append(node) def pop(self): # return xx if self.stackB: return self.stackB.pop() elif not self.stackA: return None else: while self.stackA: self.stackB.append(self.stackA.pop()) return self.stackB.pop()
发表回复