All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0201_0300.s0225_implement_stack_using_queues.MyStack Maven / Gradle / Ivy

There is a newer version: 1.41
Show newest version
package g0201_0300.s0225_implement_stack_using_queues;

// #Easy #Stack #Design #Queue #2022_07_04_Time_0_ms_(100.00%)_Space_41.7_MB_(54.75%)

import java.util.LinkedList;
import java.util.Queue;

/**
 * 225 - Implement Stack using Queues\.
 *
 * Easy
 *
 * 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:
 *
 * *   `void push(int x)` Pushes element x to the top of the stack.
 * *   `int pop()` Removes the element on the top of the stack and returns it.
 * *   `int top()` Returns the element on the top of the stack.
 * *   `boolean empty()` Returns `true` if the stack is empty, `false` otherwise.
 *
 * **Notes:**
 *
 * *   You must use **only** standard operations of a queue, which means that only `push to back`, `peek/pop from front`, `size` and `is empty` operations are valid.
 * *   Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations.
 *
 * **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:**
 *
 * *   `1 <= x <= 9`
 * *   At most `100` calls will be made to `push`, `pop`, `top`, and `empty`.
 * *   All the calls to `pop` and `top` are valid.
 *
 * **Follow-up:** Can you implement the stack using only one queue?
**/
public class MyStack {
    private Queue queueOne;
    private Queue 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();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy