做这题之前我们首先要明白一点就是,栈是先进后出的,队列是先进先出的。我们可以使用两个栈stackPop和stackPush,

1,往队列中添加元素的时候直接把要添加的值压入到stackPush栈中。

2,往队列中删除元素的时候如果stackPop中有元素我们就直接删除,如果没有元素,我们需要把stackPush中的元素全部出栈放到stackPop中,然后再删除stackPop中的元素。

这样做的目的我们就可以保证stackPop中的元素永远都是比stackPush中的元素更老。

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public Solution() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    //入队的时候只把数据存储在stackPush中即可
    public void push(int node) {
        stack1.push(node);
    }

    //出队的时候如果stackPop为空,就把stackPush中的数据全部倒入
    //stackPop中
    public int peek() {
        if (stack2.isEmpty())
            while (!stack1.isEmpty())
                stack2.push(stack1.pop());
        return stack2.isEmpty() ? -1 : stack2.peek();
    }

    public int pop() {
        int res = peek();
        stack2.pop();
        return res;
    }

    public boolean empty() {
        return stack1.empty() && stack2.empty();
    }
}

我把部分算法题整理成了PDF文档,截止目前总共有900多页,大家可以下载阅读
链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666

如果觉得有用就给个赞吧,还可以关注我的《牛客博客》查看更多的详细题解