要求
- 时间限制:1秒
- 空间限制:32768K
- 热度指数:332560
- 本题知识点: 队列 栈
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
入队时,直接压入栈1;出队时,首先判断栈2是否为空,若不为空,则直接弹出;若为空且栈1也为空,则返回NULL;若为空且栈1不为空,则把栈1中的所有元素逐个弹出并压入栈2,最后再从栈2中弹出一个元素。
python实现
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
# write code here
self.stack1.append(node)
def pop(self):
# return xx
if self.stack2:
return self.stack2.pop()
while self.stack1:
self.stack2.append(self.stack1.pop())
if self.stack2:
return self.stack2.pop()
-
运行时间:23ms
-
占用内存:5860k
C++实现
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int a;
if (stack2.empty()){
if (stack1.empty())
return NULL;
while(!stack1.empty()){
a = stack1.top();
stack2.push(a);
stack1.pop();
}
}
a = stack2.top();
stack2.pop();
return a;
}
private:
stack<int> stack1;
stack<int> stack2;
};
- 运行时间:4ms
- 占用内存:468k
拓展
用两个队列实现一个栈的功能。
思路
入栈时,直接将元素进入队列A;
出栈时,
- a.若队列A中没有元素且队列B中也没有元素,则返回NULL;
- b.若队列A为空且队列B不为空,则将B中元素全部出列再入队A中,然后再根据条件执行 c或d;
- c.若队列A中只有一个元素,则直接从队列A中出队;
- d.若A中元素大于一个,则将A中元素逐个出队再入队队列B直到A中只有一个元素,此时再从队列A出队,最后再将队列B中元素逐个出队再入队A中。