题目描述:
用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
解题分析:
可以知道队列是先进先出,而栈是先进后出,那么如何用两个栈实现队列呢?原理很简单,只往一个栈stack1里push,这是先进后出,然后pop的时候,将stack1的所有值倒进stack2,然后从stack2.pop()。通过两次的先进后出,那么这不就变成先进先出了吗。小技巧就是,只有当stack2为空的时候才将stack1的值倒入,这样可以避免push的值在stack2中的顺序不一致。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack1.empty()&&stack2.empty())
return 0;
if(stack2.empty()){
while(!stack1.empty()){
int val=stack1.top();
stack1.pop();
stack2.push(val);
}
}
int val=stack2.top();
stack2.pop();
return val;
}
private:
stack<int> stack1;
stack<int> stack2;
};