1、原题:牛客网--用两个栈实现队列
2、分析
我们知道 栈是“先进后出” 队列是“先进先出”,我们可以通过两个栈的进出栈转换 来实现队列的功能。即一个栈负责存入数据,模拟队列添加数据;另一个栈负责输出数据,模拟队列出队。
3、代码
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>(); //模拟入队
Stack<Integer> stack2 = new Stack<Integer>();//模拟出队
public void push(int node) {
stack1.push(node);
}
public int pop() {
//为了模拟队列先进先出,stack1存入的数据先弹出 再压入stack2,那么Stack2的栈顶就是最先入栈的,满足了队列的先进先出
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
int res= stack2.pop(); //出队模拟
//特别注意的是,每次弹出一个后,如果Stack2中还有剩余元素,那么我们需要把剩余元素移到stack1中,
//那么在下一次两个栈转换,弹出元素时,保证上一次Stack2中剩余的元素先弹出,,先进先出
while(!stack2.isEmpty()){
stack1.push(stack2.pop());
}
return res;
}
}