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

Remove Duplicates from Sorted List去重C代码报空指针运行错误如何解决

有序链表去重C代码运行时错误排查

报错信息:Line 19: Char 21: runtime error: member access within null pointer of type 'struct ListNode' [solution.c]

错误原因

  • 缺少空链表边界处理:如果输入链表为空(head为NULL),代码直接执行q=head->next,属于对空指针的成员访问,直接触发报错。
  • 循环条件逻辑错误:当前循环仅判断p != NULL,当遍历到链表最后一个节点时,q已经为NULL,此时代码中访问q->val或q->next的操作都会触发空指针访问异常。即使输入链表只有1个节点,也会触发该问题。

修正方案

代码需要做两处调整:

  1. 函数入口优先判断head是否为空,为空直接返回。
  2. 循环条件改为q != NULL,只要q非空,p必然为有效节点,不会出现空指针访问。

修正后代码

struct ListNode* deleteDuplicates(struct ListNode* head)
{
    // 处理空链表边界
    if (head == NULL) {
        return head;
    }
    struct ListNode *p,*q,*t;
    p = head;
    q = head->next;
    // 循环条件修改为q非空
    while(q != NULL)
    {
        if(p->val == q->val)
        {
            p->next = q->next;
            t = q;
            q = q->next;
            free(t);
        }
        else
        {
            p = q;
            q = q->next;
        }
    }
    return head;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:02