BM42 用两个栈实现队列_牛客题霸_牛客网 (nowcoder.com)
由于栈是先进后出,队列是先进先出的,所以需要两个栈来倒来倒去
- 将数据都push进入 stack1,pop的时候将stack1 中的数据倒入 stack2 中,再将数据pop出来,再把stack2的数据倒入stack1中
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
// stack1 导入 stack2
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
// 取出数据
int res = stack2.top();
stack2.pop();
// stack2 导入 stack1
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};
- 不将 stack2 中的数据还原到 stack1 中,由于每次都是从 stack2 的栈顶取数据,所以直到 stack2 为空的时候再将stack1 中的数据导入 stack2
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
// stack2 is empty
if(stack2.empty()){
// stack1 导入 stack2
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
// 取出数据
int res = stack2.top();
stack2.pop();
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};