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.
class MyQueue {
public Stack<Integer> stackPush;
public Stack<Integer> stackPop;
public MyQueue() {
stackPush = new Stack<Integer>();
stackPop = new Stack<Integer>();
}
// Push element x to the back of queue.
public void push(int x) {
stackPush.push(x);
}
// Removes the element from in front of queue.
public void pop() {
if (stackPop.isEmpty() && stackPush.isEmpty()) {
;
} else if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
stackPop.pop();
}
// Get the front element.
public int peek() {
if (stackPop.isEmpty() && stackPush.isEmpty()) {
return 0;
} else if (stackPop.isEmpty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.peek();
}
// Return whether the queue is empty.
public boolean empty() {
return stackPop.isEmpty() && stackPush.isEmpty();
}
}