用两个栈实现一个队列

思路:

  假设存在两个栈stack1、stack2,可以这样认为:

    stack2中保存的为【队列的前部分元素】,可以认为 其栈顶值 = 队列头部值。

    stack1中的元素为【未经转换的队列后部分元素】,相当于buffer一样的存在,它其实就是队列中后部分元素逆序的结果。因此需要将其元素全部投入到stack2中,这样完成翻转过程。

画图如下:

|  <----      队列        ----> |
|  <- 栈2 ->   |  <- 栈1 ->     |
| 和队列顺序一致 |  和队列顺序相反  |
class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

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

private:
    stack<int> stack1;
    stack<int> stack2;
};
原文地址:https://www.cnblogs.com/ccXgc/p/8978580.html