1.问题描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2.思路解析
入队可以把元素直接压入stack1,出队因为先进先出,不同于出栈,故无法由stack1单独实现。借助stack2,把1中的元素压入2,等1中剩下一个元素时,返回值并出栈。注意,此时2不为空,所以继续出队操作时,可以继续弹出2的栈顶元素。
若为用两个队列实现栈,入栈操作直接进队queue1,出栈要借助queue2,先把1中的元素进入2,剩余一个元素出队,1变空。入栈时进入1和2中非空的,出栈时两个一起作用。
3.C++代码
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack1.size()==0&&stack2.size()==0){
throw "empty";
}
if (stack2.size()==0){
int size = stack1.size();
for (int i=0;i<size-1;i++){
stack2.push(stack1.top());
stack1.pop();
}
int result = stack1.top();
stack1.pop();
return result;
}
else{
int result = stack2.top();
stack2.pop();
return result;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};