Problem 225: Implement Stack using Queues
Question
LeetCode Link | 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()
Returnstrue
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
andis 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.
Follow-up: Can you implement the stack using only one queue?
Constrains
1 <= x <= 9
- At most
100
calls will be made topush
,pop
,top
, andempty
. - All the calls to
pop
andtop
are valid.
Examples
Example 1
Input
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
[[], [1], [2], [], [], []]
Output
[null, null, null, 2, 2, false]Explanation
1
2
3
4
5
6 MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False
Solution Approach
Method: Manual / Simulate
Constrains
- None
This method does not have any limitations.
Concept Explanation
If you have solve question 232. Implement Queue using Stacks, you might think of using a input stack and a output stack to simulate the functionality of queue. However, this won’t work if you spend few minutes.
To simulate stack using queue, only one queue is enough. When simulate stack popping using a queue, simply re-add all the elements from the front of the queue (except for the last element) back to the end of the queue (like rotate one number from left to right). When you then pop an element, it will follow the order of a stack.
Code
Time complexity:
pop
: O(n)- Other: O(1)
Space complexity: O(n)
TypeScript
1 | class MyStack { |
Conclusion
Some people might wonder about the practical engineering significance of such problems. In fact, many algorithm problems are more about testing knowledge points and have a greater educational value than practical engineering significance. This is also true for interview questions!