You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C语言链表追加函数 使其支持向空/NULL链表添加元素

原函数无法追加到空链表的核心原因

原来的Appending函数采用值传递传入链表头指针List,当传入的头指针为NULL时,函数内对List的修改仅作用于函数内部的局部副本,不会修改外部真实的头指针变量,因此空链表场景下追加完全不生效。同时原代码还存在多处笔误:未定义变量kovetkezo、后继成员名大小写不一致(NextDiary/Nextdiary)、未初始化新节点的后继指针,可能引发编译错误或野指针问题。

修正后的实现代码
// 第一个参数改为二级指针,用于修改外部的头指针变量
void Appending(Diary **List, Diary *Element) {
    // 先把新节点的后继置空,保证追加后是合法的尾节点
    Element->NextDiary = NULL;
    // 原链表为空的场景:直接修改外部头指针为新节点
    if (*List == NULL) {
        *List = Element;
        return;
    }
    // 非空场景:遍历到尾节点再追加
    Diary *moving = *List;
    while (moving->NextDiary != NULL) {
        moving = moving->NextDiary;
    }
    moving->NextDiary = Element;
}
调用方式说明

调用时需要传入头指针的地址才能生效,示例如下:

Diary *head = NULL; // 初始为空链表
Diary *new_elem = malloc(sizeof(Diary));
// 此处省略new_elem的业务成员赋值逻辑
Appending(&head, new_elem); // 传入头指针地址,空链表场景也可正常追加

内容的提问来源于stack exchange,提问作者Kövesdi László

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:27:03