leetcode 155. 最小栈 C语言

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

typedef struct MinStack{
    struct MinStack *next;
    int val;
    int min_val;
} MinStack;

/** initialize your data structure here. */

MinStack* minStackCreate() {
    MinStack *min_stack = (MinStack*)malloc(sizeof(MinStack));
    min_stack->next = NULL;
    min_stack->min_val = INT_MIN;
    return min_stack;
}

void minStackPush(MinStack* obj, int x) {
    MinStack *min_stack = (MinStack*)malloc(sizeof(MinStack));
    min_stack->val = x;
    if ((obj->next == NULL) || ((obj->next)->min_val >= x)) {
        min_stack->min_val = x;
    } else {
        min_stack->min_val = (obj->next)->min_val;
    }
    min_stack->next = obj->next;
    obj->next = min_stack;
}

void minStackPop(MinStack* obj) {
    if (obj->next == NULL) {
        return;
    }
    MinStack *temp = obj->next;
    obj->next = temp->next;
    free(temp);
}

int minStackTop(MinStack* obj) {
    if (obj->next == NULL) {
        return -1;
    }
    return (obj->next)->val;
}

int minStackGetMin(MinStack* obj) {
    if (obj->next == NULL) {
        return -1;
    }
    return (obj->next)->min_val;
}

void minStackFree(MinStack* obj) {
    while (obj->next != NULL) {
        minStackPop(obj);
    }
}

/**
 * Your MinStack struct will be instantiated and called as such:
 * MinStack* obj = minStackCreate();
 * minStackPush(obj, x);
 
 * minStackPop(obj);
 
 * int param_3 = minStackTop(obj);
 
 * int param_4 = minStackGetMin(obj);
 
 * minStackFree(obj);
*/

 

你可能感兴趣的:(LeetCode,C)