剑指offer_20_包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
#include <iostream>
using namespace std;

class Solution {
public:
struct ListNode{
struct ListNode*next;
int val;
ListNode(int x, ListNode*p) :next(p), val(x)
{}
};
ListNode* head = NULL;
void push(int value) {
head = new ListNode(value,head);
}
void pop() {
ListNode *temp =head;
if (head != NULL){
head = head->next;
delete temp;
}
}
int top() {
if (head == NULL)return 0;
return head->val;
}
int min() {
if (head == NULL)return -1;
ListNode* p = head, *pmin = head;
while (p != NULL){
if (p->val < pmin->val)pmin = p;
p = p->next;
}
return pmin->val;
}
};
int main()
{
Solution stk;

for (int i = 0; i < 10; i++)

stk.push(i);
}
stk.pop();
stk.pop();
stk.pop();
cout << stk.min()<<endl;


cout << "end" << endl;
system("pause");

}

辅助栈解法:

剑指offer_20_包含min函数的栈

总结:

1.普通思路是,每调用一次min函数就遍历栈查找最小元素。

2.利用一个辅助栈高效实现,辅助栈就是在原栈push的时候存下的当前最小值。但并不那么高效,无非是空间换时间,