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