summaryrefslogtreecommitdiff
path: root/top-interview-questions/easy/design/02_min_stack.cc
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-02-05 18:36:31 -0800
committer3gg <3gg@shellblade.net>2025-02-05 18:36:31 -0800
commit4689e4e80b479be25f7557d05818f5caa723aafa (patch)
tree4df25811fe2a9a15b401375178da6537f4b6063f /top-interview-questions/easy/design/02_min_stack.cc
Initial commit.HEADmain
Diffstat (limited to 'top-interview-questions/easy/design/02_min_stack.cc')
-rw-r--r--top-interview-questions/easy/design/02_min_stack.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/top-interview-questions/easy/design/02_min_stack.cc b/top-interview-questions/easy/design/02_min_stack.cc
new file mode 100644
index 0000000..1bcb36a
--- /dev/null
+++ b/top-interview-questions/easy/design/02_min_stack.cc
@@ -0,0 +1,56 @@
1class MinStack {
2public:
3 MinStack() {}
4
5 void push(int val) {
6 const int minVal = (m_minStack != nullptr) ? std::min(m_minStack->val, val) : val;
7 Node* top = new Node{m_stack, val};
8 Node* minTop = new Node{m_minStack, minVal};
9 m_stack = top;
10 m_minStack = minTop;
11 }
12
13 void pop() {
14 assertNonEmpty();
15 Node* top = m_stack;
16 Node* minTop = m_minStack;
17 m_stack = m_stack->next;
18 m_minStack = m_minStack->next;
19 delete top;
20 delete minTop;
21 }
22
23 int top() {
24 assertNonEmpty();
25 return m_stack->val;
26 }
27
28 int getMin() {
29 assertNonEmpty();
30 return m_minStack->val;
31 }
32
33private:
34 struct Node {
35 Node* next;
36 int val;
37 };
38
39 void assertNonEmpty() const {
40 if (m_stack == nullptr) {
41 throw "empty stack";
42 }
43 }
44
45 Node* m_stack = nullptr; // The actual stack.
46 Node* m_minStack = nullptr; // Stack of mins.
47};
48
49/**
50 * Your MinStack object will be instantiated and called as such:
51 * MinStack* obj = new MinStack();
52 * obj->push(val);
53 * obj->pop();
54 * int param_3 = obj->top();
55 * int param_4 = obj->getMin();
56 */