225. Implement Stack using Queues - Easy
前往題目
想法
- 用兩個
queue
,雖然題目也有寫
思路
這題很簡單,注意前後順序就好
push
: 看哪個queue
不是空的就放哪個pop
: 看哪個是空的,把另一個queue
的元素搬過來,最後剩一個直接回傳top
: 一樣看哪個是空的,搬過去,剩下最後一個記錄下來回傳,也要辦過去另一個queue
empty
: 看兩個queue
是否都為空
只用一個queue
的反而更簡單,只要每次push
的時候都反轉使其模擬stack
的順序就好
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/