解法一:队列模拟

  • 栈是后进先出,队列是先进先出,想要用栈实现队列,需要把一个栈中的元素挨个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());