用两个栈实现队列

思路:

1.由于队列是先进先出的,然而栈是后进先出的

2.所以想要将入栈的元素模拟队列的结果,即先入的节点先出

3.则需要一个新的栈进行辅助,将栈1元素先压入栈2中,就实现了一次反转

4.此时栈2的栈顶的就是第一个元素,让这个元素出栈,就实现了先入先出

5.再将栈2中的元素再弹出压回栈1中

代码:

class Solution
{
public:
    //对于插入,则直接将节点插入栈1中即可
    void push(int node) {
        stack1.push(node);
    }
     //由于队列是先进先出的,但是栈是后进先出的,所以当需要把最早入栈的出栈
    //则需要先把栈中该数上面的数都移走,所以需要一个辅助的栈,将栈1的点都弹出并压入栈2中,则次数栈2的栈顶就是最早进去的元素,就让它出栈2
    //再将栈2中的元素重新返回栈1中
    int pop() {
        while(!stack1.empty()){
            stack2.push(stack1.top());
            stack1.pop();
        }
        int res=stack2.top();
        stack2.pop();
        while(!stack2.empty()){
            stack1.push(stack2.top());
            stack2.pop();
        }
        return res;
    }

private:
    //设置两个栈来实现队列
    stack<int> stack1;
    stack<int> stack2;
};