5.用栈实现队列
思路:
- 栈:先进后出
- 队列:先进先出
分配这2个栈的使用:stack1存放数据,stack2作为中转栈,用来中转数据。
代码实现:
import java.util.Stack;
//栈实现双向队列
public class Solution5 {
//stack1 主要用于存放数据
Stack<Integer> stack1 = new Stack<Integer>();
//stack2 主要用于中转
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
//添加到stack1
stack1.push(node);
}
public int pop() {
//首先判断队列是否为空,如果为空则报错
if (stack1.isEmpty()) {
System.out.println("当前队列为空");
return -1;
}
//出队时,stack2作为中转,将stack1中数据依次pop()出,放入stack2中
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
//此时stack2的栈顶对应队列头,也就是出队的数据
int val = stack2.pop();
//将stack2中的数据依次pop()出来,放入stack1中,恢复stack1的数据
while (!stack2.isEmpty()) {
stack1.push(stack2.pop());
}
return val;
}
}