225. Implement Stack using Queues

Difficulty:
Related Topics:
Similar Questions:

Problem

Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).

Implement the MyStack class:

Notes:

  Example 1:

Input
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
Output
[null, null, null, 2, 2, false]

Explanation
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False

  Constraints:

  Follow-up: Can you implement the stack using only one queue?

Solution

class MyStack {
    private Queue<Integer> queueOne;
    private Queue<Integer> queueTwo;
    private int top;

    // Initialize your data structure here.
    public MyStack() {
        queueOne = new LinkedList<>();
        queueTwo = new LinkedList<>();
        top = 0;
    }

    // Push element x onto stack.
    public void push(int x) {
        queueOne.add(x);
        top = x;
    }

    // Removes the element on top of the stack and returns that element.
    public int pop() {
        while (queueOne.size() > 1) {
            int val = queueOne.remove();
            top = val;
            queueTwo.add(val);
        }
        int popValue = queueOne.remove();
        queueOne.addAll(queueTwo);
        queueTwo.clear();
        return popValue;
    }

    // Get the top element.
    public int top() {
        return top;
    }

    // Returns whether the stack is empty.
    public boolean empty() {
        return queueOne.isEmpty();
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

Explain:

nope.

Complexity: