Constraints
- 1 <= x <= 9
- At most 100 calls will be made to push, pop, peek, and empty.
- All the calls to pop and peek are valid.
Idea #1 (Time: ?, Memory: ?)
- push: stack push
- pop: iterate until next node of stack is None and return node.data with prev.next = None
- peek: same as pop but not
prev.next = None
- empty: stack.isempty()
Test Cases
Example 1:
Input
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
Output
[null, null, null, 1, 1, false]
Explanation
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: 1, 2
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false
Code
class Node: def __init__(self, data): self.data = data self.next = None class Stack: def __init__(self): self.top = None def push(self, data): if self.top is None: self.top = Node(data) else: node = Node(data) node.next = self.top self.top = node def pop(self): if self.top is None: return None node = self.top self.top = self.top.next return node.data def peek(self): if self.top is None: return None return self.top.data def is_empty(self): return self.top is None class MyQueue: def __init__(self): self.mystack = Stack() def push(self, x: int) -> None: self.mystack.push(x) def pop(self) -> int: if self.mystack.top.next is None: return self.mystack.pop() node = self.mystack.top prev = None while node.next: prev = node node = node.next res = node.data prev.next = None return res def peek(self) -> int: node = self.mystack.top prev = None while node: prev = node node = node.next return prev.data def empty(self) -> bool: return self.mystack.is_empty()
Top comments (0)