DEV Community

Se-ok Jeon
Se-ok Jeon

Posted on

225. Implement Stack using Queues

Constraints

  1. 1 <= x <= 9
  2. At most 100 calls will be made to push, pop, top, and empty
  3. All the calls to pop and top are valid.

Idea #1 (Time: O(N), Memory: O(N))

  1. push: enqueue everything
  2. pop: dequeue everything, return last one, revert without last one.
  3. top: dequeue everything, return last one, revert!
  4. empty: same as empty

Test Cases

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

Code

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Queue:
    def __init__(self):
        self.front = None
        self.rear = None

    def enqueue(self, data):
        if self.front is None:
            self.front = self.rear = Node(data)
        else:
            node = Node(data)
            self.rear.next = node
            self.rear = node

    def dequeue(self):
        if self.front is None:
            return None
        node = self.front
        if self.front == self.rear:
            self.front = self.rear = None
        else:
            self.front = self.front.next
        return node.data

    def is_empty(self):
        return self.front is None

class MyStack:

    def __init__(self):
        self.myqueue = Queue()

    def push(self, x: int) -> None:
        self.myqueue.enqueue(x)

    def pop(self) -> int:
        buf = list()
        while not self.myqueue.is_empty():
            buf.append(self.myqueue.dequeue())
        res = buf[-1]
        buf = buf[:-1]
        for elem in buf:
            self.myqueue.enqueue(elem)
        return res

    def top(self) -> int:
        res = self.pop()
        self.myqueue.enqueue(res)
        return res

    def empty(self) -> bool:
        return self.myqueue.is_empty()
Enter fullscreen mode Exit fullscreen mode

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay