一、思路分析
首先,需要A,B两个队列;
入栈:对 A 进行入队列
出栈:将A中元素加入到B中,当A中就剩一个数据时,出队列即出栈,再交换AB两队列;
取栈顶元素:和出栈过程相似,在将A中最后一个元素,记录下来,再入B队列,再交换AB两队列,记录下来的数据就是栈顶元素;
二、代码
import java.util.LinkedList;
import java.util.Queue;
public class MyStackBy2Queue {
private Queue<Integer> A = new LinkedList<>();
private Queue<Integer> B = new LinkedList<>();
// 入队列
public void push(int x) {
A.offer(x);
}
// 出队列
public Integer pop() {
if (empty()) {
return null;
}
while (A.size() > 1) {
// 将A中的元素放入B中
Integer cur = A.poll();
B.offer(cur);
}
// 当A中只有一个元素的时候,
int ret = A.poll();
// 交换 A B两栈
swap();
return ret;
}
public void swap() {
Queue<Integer> tmp = A;
A = B;
B = tmp;
}
// 取队首元素
public Integer peak() {
if (empty()) {
return null;
}
while (A.size() > 1) {
// 将A中的元素放入B中
Integer cur = A.poll();
B.offer(cur);
}
// 当A中只有一个元素的时候,
int ret = A.poll();
B.offer(ret);
// 交换 A B两栈
swap();
return ret;
}
//判空
public boolean empty() {
return A.isEmpty() && B.isEmpty();
}
public static void main(String[] args) {
MyStackBy2Queue stack = new MyStackBy2Queue();
stack.push(5);
stack.push(4);
stack.push(3);
stack.push(2);
stack.push(1);
System.out.println(stack.peak());
while (!stack.A.isEmpty()) {
System.out.print(stack.pop() + " ");
}
}
}