做这题之前我们首先要明白一点就是,栈是先进后出的,队列是先进先出的。我们可以使用两个栈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