import java.util.LinkedList;
import java.util.Queue;
// 使用两个队列实现自定义栈
public class MyStack {
// 定义两个队列
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
// 入栈方法
public void push(int x){
// 1. 把x保存到queue2中
queue2.offer(x);
// 2. 将queue1中所有元素依次出队,然后放入queue2
while (!queue1.isEmpty()){
queue2.offer( queue1.poll() );
}
// 3. 交换两个队列
Queue<Integer> temp = queue1;
queue1 = queue2;
queue2 = temp;
}
// 出栈操作
public int pop(){
// queue1出队就是出栈
return queue1.poll();
}
// 获取栈顶元素
public int top(){
return queue1.peek();
}
// 判断为空
public boolean empty(){
return queue1.isEmpty();
}
}
============================================================================================
import java.util.LinkedList;
import java.util.Queue;
// 用一个队列实现自定义栈
public class MyStack2 {
// 定义一个队列
Queue<Integer> queue;
public MyStack2() {
queue = new LinkedList<>();
}
public void push(int x){
// 1. 首先记录当前队列长度
int l = queue.size();
// 2. 把x入队
queue.offer(x);
// 3. 把queue中原先的所有元素依次出队,然后再入队
for (int i = 0; i < l; i++)
queue.offer( queue.poll() );
}
public int pop(){
return queue.poll();
}
public int top(){
return queue.peek();
}
public boolean empty(){
return queue.isEmpty();
}
}