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.
Idea #1 (Time: O(N), Memory: O(N))
- push: enqueue everything
- pop: dequeue everything, return last one, revert without last one.
- top: dequeue everything, return last one, revert!
- 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()
 

 
    
Top comments (0)