gpt4 book ai didi

c - 插入到简单链接列表(任何位置、前端、末尾、中间)

转载 作者:行者123 更新时间:2023-11-30 19:17:56 26 4
gpt4 key购买 nike

我需要一些函数方面的帮助。

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

结构:

    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 和自由函数

最佳答案

这看起来不对:

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

nw->name 是一个指针。 C 不会将对象分配给指针,而是按值用 b->name 覆盖 nw->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)->point。如果更小,*pptr = uj否则pptr = &(*pptr)->next;

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

关于c - 插入到简单链接列表(任何位置、前端、末尾、中间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338134/

26 4 0
文章推荐: c# - 使用 OpenXML SDK 以字符串形式获取所有单元格值
文章推荐: javascript - 将数组值从特定字符 trim 为特定字符
文章推荐: c# - 在 List 中查找对象的更有效方法