1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| class MinStack { public: MinStack() : head(new node(0)) {
} void push(int x) { auto n = new node(x, head->next); if((n->next && n->next->min > x) || !n->next) n->min = x; else n->min = n->next->min; head->next = n; } void pop() { if(head->next) { auto p = head->next; head->next = head->next->next; delete p; } } int top() { if(head->next) return head->next->val; return 0; } int min() { if(head->next) return head->next->min; return 0; } private: struct node { node* next = nullptr; int val; int min = 0; node() = default; node(int val) : val(val) {} node(int val, node* next) : val(val), next(next) {} }; node* head; };
|