题目
https://leetcode-cn.com/problems/implement-stack-using-queues/
思路-两个队列
- 先将push的元素放入辅助队列中
- 交换辅助队列和主队列(是直接交换队列,队列底层用linkedlist实现)
- 如果queue1中就有元素,我们则需要再进行一步操作(如图)
代码
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue2.offer(x);
while(!queue1.isEmpty()){
//poll() 获取并移除此队列的头,如果此队列为空,则返回 null
queue2.offer(queue1.poll());
}
//完成交换
Queue<Integer> temp = new LinkedList<>();
temp = queue1;
queue1 = queue2;
queue2 = temp;
}
public int pop() {
//获取队列的头但不移除此队列的头。如果此队列为空,则返回 null
return queue1.poll();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}