解法一:队列模拟
- 栈是后进先出,队列是先进先出,想要用栈实现队列,需要把一个栈中的元素挨个pop()出来,再push到另一个栈中。
- 上图中,我们将栈a中的数据全部pop()出来,再放入栈b中,经过这么一番操作后,栈b中的元素顺序就变成先进先出的顺序了,所以栈b中的顺序跟队列顺序一样了。
解法一、解法二其实都是利用了这种思路,只是不同的函数实现细节不同而已。
push函数实现如下:
分三步操作(维持栈b中的顺序是先进先出的顺序):
- 将栈b中的内容倒腾到栈a中
- 将新元素插入栈a中
- 再将栈a中的所有数据倒腾到栈b中
Java参考代码:
import java.util.Stack; 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() { if(stack2.size()<=0){ while(stack1.size()!=0){ stack2.push(stack1.pop());