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

C语言单链表插入后表头出现多余0值节点问题求助

问题根因

你当前实现的是不带头结点的单链表逻辑,但init_list()初始化函数错误地预分配了一个无意义的头结点,这个节点的data字段未初始化,输出时显示为0,就是你看到的多余节点。

错误逻辑复现

  • 调用init_list()后,head指向一个malloc出来的节点,data未赋值(测试环境下值为0),link=NULL
  • 执行insert 0 1时,pos=0走头插逻辑:新节点link指向当前head(也就是那个0值节点),然后head更新为新节点,直接形成了1->0->NULL的结构
  • size()函数遍历所有节点计数,所以返回2,和你的实际输出完全匹配
需要修改的代码点

1. 修复init_list初始化函数

原错误代码:

void init_list() { 
    head = (Node*)malloc(sizeof(Node));
    head->link = NULL;
}

修改为:

void init_list() { 
    head = NULL; // 不带头结点的链表初始化直接设空,不需要预分配节点
}

2. 修复delete函数的野指针问题

原delete函数的else分支里,removed变量未赋值就调用free(removed),属于典型野指针错误,修改如下:

void delete(int pos) 
{
    Node* prev, * removed;

    if (pos == 0 && is_empty() == 0) { 
        removed = get_entry(pos); 
        head = head->link;
        free(removed); 
    }
    else {
        prev = get_entry(pos-1); 
        if (prev != NULL) {
            removed = remove_next(prev); // 先获取待删除节点指针
            free(removed); 
        }
    }
}
验证效果

修改完成后运行你的测试用例,输出就会符合预期:
输入:

2
insert 0 1
size

输出:

1->NULL
1
1->NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:03