码迷,mamicode.com
首页 > 编程语言 > 详细

C语言链表操作

时间:2014-11-05 15:11:35      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:ar   sp   strong   on   bs   amp   size   new   as   

    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版本实现了插入功能,但是很明显就是,其实所有的插入都是:

新节点链向当前节点的下一 节点

当前节点链向新节点

所以有了第三版本我们需要的就是当前节点  和 指向当前节点link 的一个指针

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 的指针

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;
}


C语言链表操作

标签:ar   sp   strong   on   bs   amp   size   new   as   

原文地址:http://my.oschina.net/u/195896/blog/341052

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!