插入到简单链接列表(无处不在,前端,末尾,中间)

时间:2014-12-07 00:20:59

标签: c function insert singly-linked-list

我想在函数中提供一些帮助。

我想编写一个插入链表的函数。但不仅仅是在中间,如果必须插入到前端或末端,它必须工作。

结构:

    typedef struct ranklist {
        int point;
        char* name;
        struct ranklist *next;
    } ranklist;

A开始使用它,但它不起作用,程序每次都停止。

功能:

void rank_insert(ranklist *b, ranklist *first){
    ranklist *nw;
    int name_length;

    nw = (ranklist*) malloc(sizeof(*b));
    nw->point = b->point;
    name_length = strlen(b->name);
    nw->name = (char*) malloc(name_length + 1);
    nw->name = b->name;

    int element = 0;
    while(first != NULL){
        if (first->point > uj->point){
            if (first->next == NULL){
                nw->next = NULL;
                first->next = nw;
            }
            first = first->next;
            element++;
        }
        else if (first->point == uj->point){
                nw->next = first->next;
                first->next = nw;
        }
        else if (first->point < nw->point){
            if (element == 0){
                nw->next = first;
                first = nw;
            }
            else{
                nw->next = first->next;
                first->next = nw;
            }
        }
    }
}

我有一个从文件读取的工作,写入文件,printf和自由函数

1 个答案:

答案 0 :(得分:1)

这看起来不对:

nw->name = (char*) malloc(name_length + 1);
nw->name = b->name;

nw-&gt; name是一个指针。 C不会将对象分配给指针,它会使用b-&gt; name by value覆盖nw-&gt; name。尝试

nw->name = (char*) malloc(name_length + 1);
strcpy(nw->name, b->name, name_length);
nw->name[name_length] = '\0';

另外,我看到uj已使用,但它在哪里定义?

需要返回first,因为该函数可以更改列表的头部。

我不认为这个循环处理插入空列表。

代码是按降序维护列表,除了first->point < uj->pointelement != 0时,它首先放置uj。

处理单个链接列表中的插入的方法是跟踪指向每个元素的指针,以便能够在之前或之后进行处理。所以声明ranklist **pptr = &first并检查(* pptr) - &gt;点。如果它更小,*pptr = uj其他pptr = &(*pptr)->next;

一种有趣的阅读代码,只有双语匈牙利语/英语程序员才能理解: - )