准备两个队列,由于队列为先入先出,栈为先入后出,每次将原队列前n-1个数放入辅助队列,原队列的最后一个数弹出,此时原队列为空,所以改变原队列与辅助队列的引用,再将新的原队列的前n-1个数放入辅助队列,原队列剩下的一个数弹出,就实现了先入后出操作。
code:
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackQueueConvert {
public static class Queue2Stack{
private Queue<Integer> queue;
private Queue<Integer> help;
public Queue2Stack() {
this.queue = new LinkedList<Integer>();
this.help = new LinkedList<Integer>();
}
public void push(int num) {
queue.add(num);
}
public int pop() {
if(queue.isEmpty()) {
throw new RuntimeException("queue is empty");
}
while(queue.size() > 1) {
help.add(queue.poll());//poll方法为弹出队首或栈顶元素
}
swap();
return (int)queue.poll();
}
public void swap() {
Queue<Integer> tmp = help;
help = queue;
queue = tmp;
}
}
}