使用一个stack会导致入队和出队的位置变换,使用两个stack时就再变一次,就变成了队列。插入时插入到stack2中,出队列时从stack1中出栈,若stack1中没有元素则将stack2中的元素压入到stack1中再继续从stack1中出栈即可。

class Solution
{
public:
    void push(int node) {
        stack2.push(node);
    }

    int pop() {
        if(stack1.empty())
        {
            while(!stack2.empty())
            {
                stack1.push(stack2.top());
                stack2.pop();
            }
        }
        if(!stack1.empty())
        {
            int rst = stack1.top();
            stack1.pop();
            return rst;
        }

        //这里给一个默认值;
        return -1;
    }

private:
    stack<int> stack1;    //出队列;
    stack<int> stack2;    //入队列;
};