思路:主要问题在于getMin,必须是一个常数级的查找返回,因此最好是每push一个就和当前min进行比较,始终保存min。
class MinStack {public:MinStack(){head = new ListNode(INT_MAX);}void push(int x) {ListNode* tmpNode=new ListNode(x);if (x < head->val){head->val = x;}tmpNode->next = head->next;head->next = tmpNode;}void pop() {if (head->next ){if (head->val == head->next->val){ListNode* tmp = head->next->next;head->val = INT_MAX;while (tmp){if (tmp->val < head->val)head->val = tmp->val;tmp = tmp->next;}}head->next = head->next->next;}}int top() {if (head->next)return head->next->val;}int getMin() {if (head->next)return head->val;}private:struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};ListNode* head;};
原文:http://www.cnblogs.com/flyjameschen/p/ce753085aaafc40859564bb28d74f088.html