本次题目
225 用队列实现栈
- 使用两个队列:一队列用于push和pop,二队列用于备份元素。
- push时直接将数据入一队列,pop时将一队列中除了最后面元素外的其他元素按顺序入二队列,pop之后再将二队列中的元素入一队列,可直接赋值。
- 判断栈顶元素top同上述无pop操作(不能直接用peek),当一队列为空时栈空。
- 使用两个队列:一队列中保持和出栈一样的元素顺序(反过来),二队列用于使元素反过来存入一队列。
- push时先将元素入二队列,然后将一队列中的元素按顺序入二队列,最后交换一二队列。pop时直接出一队列。
- 判断栈顶元素top可直接用peek,当一队列为空时栈空。
- 使用一个队列:不用二队列备份元素,直接再pop时将除了最后面元素外的其他元素重新入队即可。
- 注意:pop后记得清空二队列(别把一队列清空了)。队列Queue入队offer();出队poll();查看队列头部元素peek()。双向队列Deque入队offerLast();出队pollFirst();查看队列头部元素peekFirst()。
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()){
queue2.offer(queue1.poll());
}
Queue<Integer> temp = queue1;
queue1 = queue2;
queue2 = temp;
}
public int pop() {
return queue1.poll();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}