LeetCode 225. Implement Stack using Queues

链接:https://leetcode.com/problems/implement-stack-using-queues/
思路:用一个队列来存元素,难点在于pop的时候要的是队尾的元素,而队列只能从队首出元素 We use a queue to store elements. The hard point is that when we use pop method, we want to access the queue rear, but we can only pop an element from the queue front.

  • Approach 1: 用两个队列,pop的时候,将队尾以外部分暂存到q2,取出队尾x,再将q2放回q1。When popping, q2 acts as a temporary storage for q1 except q1 rear.
  • Approach 2: 只用一个队列,pop的时候,将队尾以外的部分出队再入队,相当于将队尾平移到队首。When popping, we dequeue an element from q1 front, and enqueue it to q1 rear, until the former rear comes to the front.
class MyStack {
private:
    queue<int> q1, q2; // q1 is main, q2 acts as a buffer
    int topE;
public:
    /** Initialize your data structure here. */
    MyStack() {
        
    }
    
    /** Push element x onto stack. */
    void push(int x) {
        q1.push(x);
        topE = x;
    }
    
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        // q1除队尾暂存到q2,取出队尾x,就是要返回的值
        while(q1.size() != 1) {
            q2.push(q1.front());
            q1.pop();
        }
        int x = q1.front();
        q1.pop();
        // 将q2放回q1,更新topE
        int newTop;
        while(!q2.empty()) {
            newTop = q2.front();
            q1.push(newTop);
            q2.pop();
        }
        topE = newTop;
        return x;
    }
    
    /** Get the top element. */
    int top() {
        return topE;
    }
    
    /** Returns whether the stack is empty. */
    bool empty() {
        return q1.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值