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(); } }