实现思路:
1)准备两个队列 queue1, queue2(队列特性先进先出,栈的特性先进后出) 2)入栈时,元素依次插入到queue1中 3)出栈时,做如下处理: 3.1)如果queue2为空,则将queue1向queue2拷贝,剩最后一个元素返回 3.2)如果queue2不为空,则将queue2向queue1拷贝,剩最后一个元素返回
直接上代码:
import java.util.LinkedList;
import java.util.Queue;
/**
* @ClassName : MyStackWithQueue
* @Description: 通过队列实现栈
* @Author: liulianglin
* @Date: 2021/11/17 23:36
* @Version : 1.0
*
实现思路:
1)准备两个队列 queue1, queue2(队列特性先进先出,栈的特性先进后出)
2)入栈时,元素依次插入到queue1中
3)出栈时,做如下处理:
3.1)如果queue2为空,则将queue1向queue2拷贝,剩最后一个元素返回
3.2)如果queue2不为空,则将queue2向queue1拷贝,剩最后一个元素返回
*/
public class MyStackWithQueue {
private Queue<Integer> queue1 = new LinkedList<>();
private Queue<Integer> queue2 = new LinkedList<>();
/**
* 插入
* @return
*/
private boolean push(int ele){
return queue1.add(ele);
}
private Integer pop(){
if (queue2.size() == 0){
//如果queue2为空,则将queue1向queue2拷贝,剩最后一个元素返回
while (queue1.size() > 1) {
queue2.add(this.queue1.poll());
}
//返回此时queue1的最后一个元素
return this.queue1.poll();
}else{
//如果queue2不为空,则将queue2向queue1拷贝,剩最后一个元素返回
while(queue2.size() > 1){
queue1.add(this.queue2.poll());
}
return this.queue2.poll();
}
}
public static void main(String[] args) {
MyStackWithQueue myStackWithQueue = new MyStackWithQueue();
myStackWithQueue.push(1);
myStackWithQueue.push(2);
myStackWithQueue.push(3);
System.out.println(myStackWithQueue.pop());
System.out.println(myStackWithQueue.pop());
System.out.println(myStackWithQueue.pop());
}
}