import java.util.LinkedList;
import java.util.Queue;
/**
* @author mazhen
* @className QueueToStack
* @Description 两个队列实现栈
* @date 2021/3/29 10:26
*/
public class QueueToStack {
Queue<Integer> queue1 = new LinkedList<>();
Queue<Integer> queue2 = new LinkedList<>();
//入栈
public void push(Integer x) {
queue1.add(x);
}
//栈大小
public int stackSize() {
return queue1.size() + queue2.size();
}
//把一个队列的n-1个元素转出放入到另一个队列
private void transferToAnother () {
if (!queue1.isEmpty()) {
while (queue1.size()>1) {
queue2.add(queue1.poll());
}
} else if (!queue2.isEmpty()) {
while (queue2.size()>1) {
queue1.add(queue2.poll());
}
}
}
//出栈
public Integer poll() {
if (stackSize() <= 0) {
System.out.println("栈已空");
return -1;
} else {
if (queue1.size()>0) {
transferToAnother();
return queue1.poll();
} else if (queue2.size()>0) {
transferToAnother();
return queue2.poll();
}
}
return -1;
}
public static void main(String[] args) {
QueueToStack queueToStack = new QueueToStack();
queueToStack.push(1);
queueToStack.push(2);
queueToStack.push(3);
queueToStack.push(4);
System.out.println(queueToStack.poll());
System.out.println(queueToStack.poll());
System.out.println(queueToStack.poll());
System.out.println(queueToStack.poll());
}
}
参考:https://blog.csdn.net/u011328417/article/details/79436120