实现思路
使用两个队列操作模拟栈的操作,队列是先进先出,栈是先进后出,因此需要使用data队列进行存储数据,保留最新的数据,除此之外将数据全部压入help队列中等待下一轮操作。
由于每次需要操作的都是data队列,所以在一轮操作结束后swap两个队列的引用,这样通过不断迭代模拟栈的出栈顺序输入全部数据。
代码实现
import java.util.LinkedList;
import java.util.Queue;
public class Code_StackAndQueueConvert {
public static class TwoQueueStack{
private Queue<Integer> queueData;
private Queue<Integer> queueHelp;
public TwoQueueStack() {
queueData = new LinkedList<Integer>();
queueHelp = new LinkedList<Integer>();
}
public void push(Integer obj) {
queueData.add(obj);
}
public Integer pop() {
if(queueData.isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
while(queueData.size() > 1) {
queueHelp.add(queueData.poll());
}
Integer res = queueData.poll();
swap();
return res;
}
public void swap() {
Queue<Integer> tmp = queueData;
queueData = queueHelp;
queueHelp = tmp;
}
}
public static void main(String[] args) {
TwoQueueStack stack = new TwoQueueStack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}