leetcode 155. 最小スタックC言語

1916 ワード

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);
*/