题号225
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
两个队列,一个用来当栈,一个起到备份的作用
class MyStack {
Queue<Integer> queue1; // 和栈中保持一样元素的队列
Queue<Integer> queue2; // 辅助队列
/** Initialize your data structure here. */
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue2.add(x);
while(!queue1.isEmpty()){
queue2.add(queue1.poll());//poll函数和pop函数类似,删除队首元素并返回
}
Queue <Integer> queuetmp=new LinkedList<>();//创建一个临时队列用于交换
queuetmp=queue2;
queue2=queue1;
queue1=queuetmp;//将q1和q2交换
}
public int pop() {
while(!queue1.isEmpty()){
queue2.add(queue1.poll());
}
int head=queue2.poll();
while(!queue2.isEmpty()){
queue1.add(queue2.poll());
}
return head;
}
public int top() {
while(!queue1.isEmpty()){
queue2.add(queue1.poll());
}
int head=queue2.peek();//只返回不删除
while(!queue2.isEmpty()){
queue1.add(queue2.poll());
}
return head;
}
public boolean empty() {
return queue1.isEmpty()&&queue2.isEmpty();
}
}