看了题解,感觉题解还是有点麻烦
入队没有什么要求,直接入栈就可以
出队需要满足队的先入先出原则,因此需要一个额外的栈,把之前在栈里的元素再反方向倒腾过来,额外的栈直接出栈就是出队
peek检索,这个和题解的方式不同。如果额外的栈非空(s2),直接对s2进行peek检索。如果s2为空,直接返回s1空时入栈的元素
class MyQueue {
private Stack<Integer> s1,s2;
int front;
public MyQueue() {
s1 = new Stack<>();
s2 = new Stack<>();
}
public void push(int x) {
//入栈是往s1里加
if(s1.isEmpty()){
front=x;//记录入栈的第一个元素
}
s1.push(x);
}
public int pop() {
//先把元素都放到s2栈中
if(s2.isEmpty()) {
//如果s2非空,直接pop就可以,不用转移
//必须保证s2是空的
while(!s1.isEmpty()) {
s2.push(s1.pop());
}
}
return s2.pop();
}
public int peek() {
//先入先出,获取第一个入队的元素
if(!s2.isEmpty()) {
//如果此时s2还是非空的
front=s2.peek();
}
return front;
}
public boolean empty() {
return s1.isEmpty() && s2.isEmpty();
}
}