用两个栈实现一个队列
栈:后进先出
队列:先进先出
我们可以考虑,入栈时将元素全部入栈到第一个中,需要出栈时,将第一个栈当中的元素全部出栈并依次入栈到第二个栈当中,此时第一个栈当中最先进来的元素就是第二个栈中的栈顶元素,出栈时就直接将其出栈即可。
第一次是这样写的,可是结果错误。因为没有考虑到元素可能不是一次入队列的。可能是经过入栈出栈再入栈的过程。这样就会导致第二次入栈的元素会放入第二个栈中的栈顶位置。所以,我们出栈就先只管第二个栈,当第二个栈中的元素全部出栈,再将第一个栈中的元素再依次入栈。
具体实现如下:
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
int ret = stack2.top();
stack2.pop();
return ret;
}
private:
stack<int> stack1;
stack<int> stack2;
};