问题描述
题目描述中有说不存在空栈的pop和peek,所以无需判断这个
解析
重点在于思路,代码白给。
要用栈实现队列,肯定是两个栈才可以。一个做入队操作,一个做出队操作。
首先入队简单,往栈里加就完事了。
出队复杂,要从出栈的栈里取,而且当出栈的栈是空的时候,要把入队的栈的元素放到出队的栈中。
代码
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
isDumpStackIn();
return stackOut.pop();
}
public int peek() {
isDumpStackIn();
return stackOut.peek();
}
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
}
public void isDumpStackIn(){
if(!stackOut.isEmpty()){
return ;
}
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/