如何修改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ó
相关产品推荐
相关产品推荐

