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

C语言实现带哑结点的无参generate_list链表初始化函数

代码错误点说明

你写的代码存在4个核心问题:

  • 第一个typedef定义结构体时未声明要求的node别名,语法不完整,不符合题目对node结构体类型的定义要求。
  • 第二个typedef自定义的a_list结构体完全不符合要求,题目明确说明list本质是指向node类型的指针,不需要额外封装存储头指针的结构体。
  • 函数内创建的d_node是栈上局部变量,函数执行结束后该变量占用的内存会被系统回收,把它的地址赋值给头指针会生成野指针,触发未定义行为。
  • 函数中给list*分配内存的逻辑错误,list本身就是指针类型,不需要额外为其分配一层包装结构的内存。
正确实现逻辑

严格按照题目要求分三步实现即可:

  1. 定义名为node的结构体,包含整型成员val、指向同类型节点的指针成员next。
  2. 用typedef将node*(指向node类型的指针)定义为list类型,代表链表头指针。
  3. 实现generate_list函数:在堆内存上分配哑结点内存(避免函数返回后内存失效),将哑结点的val初始化为0、next初始化为NULL,直接返回该哑结点的指针作为链表头指针即可。
可运行正确代码
#include <stdlib.h>

// 定义node结构体类型
typedef struct node {
    int val;
    struct node *next;
} node;

// 定义list类型为node指针(链表头指针类型)
typedef node* list;

// 无参函数,返回带初始化哑结点的链表
list generate_list(void) {
    // 堆上分配哑结点内存,函数返回后内存不会自动释放
    node *dummy_node = malloc(sizeof(node));
    // 初始化哑结点属性
    dummy_node->val = 0;
    dummy_node->next = NULL;
    // 直接返回哑结点指针作为链表头指针
    return dummy_node;
}
注意事项
  • 所有需要在函数返回后继续使用的链表节点,都必须通过malloc在堆上分配内存,不能使用函数内的栈上局部变量。
  • C语言中无参数的函数声明建议显式写void,明确表示不接收任何参数,避免编译器做隐式参数推断。
  • 后续使用完链表后,需要遍历所有节点调用free释放内存,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:45:32