剑指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

 

.

 

posted @ 2017-10-13 11:32  Deaglepc  阅读(276)  评论(0编辑  收藏  举报