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

单链表中返回指定节点前驱节点的C语言实现错误求助

单链表前驱查找函数bug修复

错误根因

  • 空指针访问漏洞:代码中先执行了struct node *current_node = l->head;访问链表结构体的头节点成员,之后才判断l == NULL的非法输入场景,如果传入的l是空指针,第一行代码就会触发段错误,后续的空指针校验完全不生效。

修复后代码

/* 返回单链表L中节点N的前驱节点指针;如果N是链表第一个节点或者N不在链表中,返回NULL */
struct node *list_prev(struct list *l, struct node *n) {
    // 优先完成所有参数合法性校验,再操作指针访问成员
    if (l == NULL || n == NULL || l->head == NULL || n == l->head) 
        return NULL;

    struct node *current_node = l->head;
    while (current_node->next != NULL) {
        if (current_node->next == n) {
            return current_node;
        }
        current_node = current_node->next;
    }
    return NULL;
}

逻辑说明

修复后保留了原有正确的遍历逻辑:从链表头节点开始遍历,每次判断当前节点的后继是否是目标节点,匹配则直接返回当前节点;遍历到链表尾仍未匹配则返回NULL,完全符合需求定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:03