225. Implement Stack using Queues - Easy

前往題目

想法

  • 用兩個queue,雖然題目也有寫

思路

這題很簡單,注意前後順序就好

push: 看哪個queue不是空的就放哪個
pop: 看哪個是空的,把另一個queue的元素搬過來,最後剩一個直接回傳
top: 一樣看哪個是空的,搬過去,剩下最後一個記錄下來回傳,也要辦過去另一個queue
empty: 看兩個queue是否都為空

只用一個queue的反而更簡單,只要每次push的時候都反轉使其模擬stack的順序就好

1 queue solution

Code

class MyStack {

    Queue<Integer> q1;
    Queue<Integer> q2;

    public MyStack() {
        q1 = new LinkedList<Integer>();
        q2 = new LinkedList<Integer>();
    }

    public void push(int x) {
        if (!q1.isEmpty()) {
            q1.offer(x);
        } else {
            q2.offer(x);
        }
    }

    public int pop() {
        if (q2.isEmpty()) {
            while (q1.size() > 1) {
                q2.offer(q1.poll());
            }
            return q1.poll();
        } else {
            while (q2.size() > 1) {
                q1.offer(q2.poll());
            }
            return q2.poll();
        }
    }

    public int top() {
        int top = 0;
        if (q2.isEmpty()) {
            while (q1.size() > 1) {
                q2.offer(q1.poll());
            }
            top = q1.poll();
            q2.offer(top);
        } else {
            while (q2.size() > 1) {
                q1.offer(q2.poll());
            }
            top = q2.poll();
            q1.offer(top);
        }
        return top;
    }

    public boolean empty() {
        return q1.isEmpty() && q2.isEmpty() ? true : false;
    }
}

225. Implement Stack using Queues - Easy
https://f88083.github.io/2024/08/02/225-Implement-Stack-using-Queues/
作者
Simon Lai
發布於
2024年8月2日
許可協議