C語言鏈表操做

    v2版爲非健全版本,很明顯不能再最前端插入。
前端

int sll_insert_v2(Node *current, int value)
{
    Node *prev;
    Node *newNode;

    while (current != NULL && current->value >= value) {
        prev = current;
        current = current->next;
    }

    newNode = malloc(sizeof(Node));
    if (newNode == NULL) {
        return FALSE;
    }
    newNode->value = value;

    if (prev == NULL) {
        newNode->next = current->next;
        current->next = newNode;
    } else  {
        newNode->next = current;
        prev->next = newNode;
    }
    return TRUE;
}


v3版本實現了插入功能,可是很明顯就是,其實全部的插入都是:指針

新節點鏈向當前節點的下一 節點code

當前節點鏈向新節點class

因此有了第三版本咱們須要的就是當前節點  和 指向當前節點link 的一個指針next

int sll_insert_v3(Node **rootp, int value)
{
    Node *newNode;
    Node *current;
    Node *prev;

    current = *rootp;

    while (current != NULL && current->value >= value) {
        prev = current;
        current=  current->next;
    }

    newNode = malloc(sizeof(Node));
    newNode->value = value;

    newNode->next = current;
    if (prev == NULL) {
        *rootp  = newNode;
    } else {
        prev->next = newNode;
    }

    return TRUE;
}


v4版本:current爲當前版本, rootp爲指向當前節點的link 的指針while

int sll_insert_v4(Node **rootp, int value)
{
    Node *newNode;
    Node *current;

    while ((current = *rootp) != NULL && current->value >= value) {
        rootp = &current->next;
    }

    newNode = malloc(sizeof(Node));
    newNode->value = value;
    newNode->next = current->next;

    *rootp = newNode;

    return TRUE;
}
相關文章
相關標籤/搜索