剑指offer-用两个栈实现队列

Posted DeaglePc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-用两个栈实现队列相关的知识,希望对你有一定的参考价值。

这题也很容易想到:一个栈出栈到另一个栈,然后另一个栈再出栈的顺序将是队列的顺序(原序列逆序的逆序是正序)

思路:两个栈,stack1,stack2; stack1负责存放元素,stack2负责暂时存放stack1的一次出栈,为了改变stack1里面元素的存放顺序

入栈操作:1.先将stack1依次出栈,依次存入stack2(这时stack2存放的是目标顺序的倒序)

     2.将新节点node压入stack2(新节点位于栈顶,最先出栈)

     3.将stack2的元素出栈,依次存入stack1(比较新的元素到了栈底,满足了后进后出,先进先出)stack1将是队列的顺序

弹出操作:stack1出栈的顺序就是队列的顺序了,直接stack1.pop()即可

比如要插入 1 2

class Solution
{
public:
    void push(int node) {
        while(!stack1.empty()){
            stack2.push(stack1.top());
            stack1.pop();
        }
        stack2.push(node);
        while(!stack2.empty()){
            stack1.push(stack2.top());
            stack2.pop();
        }
    }

    int pop() {
        int tmp = stack1.top();
        stack1.pop();
        return tmp;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};
View Code

 

.

 

以上是关于剑指offer-用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 09. 用两个栈实现队列

剑指offer-用两个栈实现队列

剑指offer---用两个栈实现队列

《剑指Offer——面试题9:用两个栈实现队列》代码

《剑指offer》— JavaScript用两个栈实现队列

剑指offer用两个栈实现队列