diff --git a/0225_implement-stack-using-queues/README.md b/0225_implement-stack-using-queues/README.md new file mode 100644 index 0000000..3508516 --- /dev/null +++ b/0225_implement-stack-using-queues/README.md @@ -0,0 +1,40 @@ +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? + +https://leetcode.com/problems/implement-stack-using-queues/ \ No newline at end of file diff --git a/0225_implement-stack-using-queues/python3/solution.py b/0225_implement-stack-using-queues/python3/solution.py new file mode 100644 index 0000000..e69de29 diff --git a/0225_implement-stack-using-queues/python3/two-queues-pop-linear.py b/0225_implement-stack-using-queues/python3/two-queues-pop-linear.py new file mode 100644 index 0000000..f620a5e --- /dev/null +++ b/0225_implement-stack-using-queues/python3/two-queues-pop-linear.py @@ -0,0 +1,45 @@ +from collections import deque + +class MyStack: + + def __init__(self): + self.q = deque() + self.tmp = deque() + + def push(self, x: int) -> None: + self.q.append(x) + self.head = x + + def pop(self) -> int: + tmp = deque() + popped = None + prev = None + + while True: + popped = self.q.popleft() + + if not self.q: + break + + prev = popped + tmp.append(prev) + + self.q = tmp + self.head = prev + + return popped + + + def top(self) -> int: + return self.head + + def empty(self) -> bool: + return len(self.q) == 0 + + +# Your MyStack object will be instantiated and called as such: +# obj = MyStack() +# obj.push(x) +# param_2 = obj.pop() +# param_3 = obj.top() +# param_4 = obj.empty()