1. 程式人生 > 其它 >LeetCode 225. Implement Stack using Queues

LeetCode 225. Implement Stack using Queues

LeetCode 225. Implement Stack using Queues (用佇列實現棧)

題目

連結

https://leetcode-cn.com/problems/implement-stack-using-queues/

問題描述

請你僅使用兩個佇列實現一個後入先出(LIFO)的棧,並支援普通棧的全部四種操作(push、top、pop 和 empty)。

實現 MyStack 類:

void push(int x) 將元素 x 壓入棧頂。
int pop() 移除並返回棧頂元素。
int top() 返回棧頂元素。
boolean empty() 如果棧是空的,返回 true ;否則,返回 false 。

注意:

你只能使用佇列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 這些操作。
你所使用的語言也許不支援佇列。 你可以使用 list (列表)或者 deque(雙端佇列)來模擬一個佇列 , 只要是標準的佇列操作即可。

示例

輸入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
輸出:
[null, null, null, 2, 2, false]

解釋:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

提示

1 <= x <= 9
最多呼叫100 次 push、pop、top 和 empty
每次呼叫 pop 和 top 都保證棧不為空

思路

複雜度分析

時間複雜度 O(n)
空間複雜度 O(1)

程式碼

Java

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

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

        public void push(int x) {
            q2.offer(x);
            while (!q1.isEmpty()) {
                q2.offer(q1.poll());
            }
            Queue<Integer> temp = q1;
            q1 = q2;
            q2 = temp;
        }

        public int pop() {
            return q1.poll();
        }

        public int top() {
            return q1.peek();
        }

        public boolean empty() {
            return q1.isEmpty();
        }