leecode:232. 用栈实现队列
思考:
用栈实现队列,可以考虑将一个栈作为入栈,另一个栈作为出栈,配合使用。注意,入栈考虑第一个栈;出栈考虑用第二个栈
class MyQueue {
Stack<Integer> s1 = new Stack<>(); // 作为入栈
Stack<Integer> s2 = new Stack<>(); // 作为出栈
public MyQueue(){
}
public void push(int x){
s1.push(x);
}
public int pop(){
//如果s2为空,且s1不为空,将s1的元素转移到s2中
if(s2.isEmpty()){
while(!s1.isEmpty(){
s2.push(s1.pop());
}
}
return s2.pop();
}
public int peek(){
//如果s2为空,且s1不为空,将s1的元素转移到s2中
if(s2.isEmpty()){
while(!s1.isEmpty(){
s2.push(s1.pop());
}
}
return s2.peek();
}
public boolean empty(){
return s1.isEmpty()&&s2.isEmpty();
}
}
总结:
我最开始的时候想到把两个栈分别用作入栈和出栈,但是具体的实现细节任然有点问题,比如:我没考虑到要先s2为空我才将s1的元素压入s2中,还有考虑s1不为空我写成了:s1.pop()!=null 这里我还得仔细思考下,继续加油吧!!
通过查资料发现:
如果栈是空的,我去用pop()方法,则会报空栈异常,所以再用pop方法时,得先判断栈是否为空。