请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty)。
public class MyQueue {
private Stack<Integer> s1;//入栈
private Stack<Integer> s2;//出栈
//构造方法
public MyQueue(){
s1 = new Stack<>();
s2 = new Stack<>();
}
//入栈
public void push(int x) {
/*
1.首先给s1入栈
*/
s1.push(x);
}
public int pop() {
/*
1.如果s2为空,则将s1(是否为空)全部的值先移动到s2
2.如果s2有值,则直接弹出
*/
if (s2.empty()){
while(!s1.empty()){
s2.push(s1.pop());
}
}
//这个判断条件就是去除s1为空,从而导致s2也为空的情况
if (!s2.empty()){
return s2.pop();
}
return -1;
}
public int peek() {
if (s2.empty()){
while(!s1.empty()){
s2.push(s1.pop());
}
}
if (!s2.empty()){
return s2.peek();
}
return -1;
}
public boolean empty() {
if (s1.empty() && s2.empty()){
return true;
}
return false;
}
}
网友评论