LeetCode/solutions/232. Implement Queue using Stacks.md
2019-09-13 23:08:41 +08:00

1.8 KiB
Raw Blame History

232. Implement Queue using Stacks

思路

用栈实现队列。
设置两个栈stk1和stk2stk1中的元素是按照正常入栈顺序排的stk2则是逆序且同一时刻stk1和stk2至少一个为空。
若stk1不空对队列入队的话直接对stk1入栈即可否则要将stk2中所有元素pop到stk1中后再对stk1入栈。
若stk2不空对队列出队的话直接对stk2出栈即可否则要将stk1中所有元素pop到stk2中后再对stk2出栈。

C++

class MyQueue {
private:
    stack<int>stk1;
    stack<int>stk2;
public:
    /** Initialize your data structure here. */
    MyQueue() {
        
    }
    /** Push element x to the back of queue. */
    void push(int x) {
        if(stk1.empty()){
            int tmp;
            while(!stk2.empty()){
                tmp = stk2.top();
                stk2.pop();
                stk1.push(tmp);
            }
        }
        stk1.push(x);
    }
    /** Removes the element from in front of queue and returns that element. */
    int pop() {
        int tmp;
        if(stk2.empty()){
            while(!stk1.empty()){
                tmp = stk1.top();
                stk1.pop();
                stk2.push(tmp);
            }
        }
        tmp = stk2.top();
        stk2.pop();
        return tmp;
    }
    
    /** Get the front element. */
    int peek() {
        if(stk2.empty()){
            int tmp;
            while(!stk1.empty()){
                tmp = stk1.top();
                stk1.pop();
                stk2.push(tmp);
            }
        }
        return stk2.top();
    }
    /** Returns whether the queue is empty. */
    bool empty() {
        return stk1.empty() && stk2.empty();
    }
};