Implement the following operations of a queue using stacks.
push(x) – Push element x to the back of queue.
pop() – Removes the element from in front of queue.
peek() – Get the front element.
empty() – Return whether the queue is empty.
维护两个堆栈,一个只可以进,一个只可以出,百度15年测试实习生电话面试题。(同学面试遇到的)
class MyQueue {
private Stack<Integer> mStack1 = new Stack<Integer>();
private Stack<Integer> mStack2 = new Stack<Integer>();
// Push element x to the back of queue.
public void push(int x) {
mStack1.push(x);
}
// Removes the element from in front of queue.
public void pop() {
if (!empty()) {
if (mStack2.size() != 0) {
mStack2.pop();
} else {
while (mStack1.size() > 0) {
mStack2.push(mStack1.pop());
}
mStack2.pop();
}
}
}
// Get the front element.
public int peek() {
if (!empty()) {
if (mStack2.size() != 0) {
return mStack2.peek();
} else {
while (mStack1.size() > 0) {
mStack2.push(mStack1.pop());
}
return mStack2.peek();
}
}
return -1;
}
// Return whether the queue is empty.
public boolean empty() {
return mStack1.size() == 0 && mStack2.size() == 0;
}
}