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个节点,也会触发该问题。
修正方案
代码需要做两处调整:
- 函数入口优先判断
head是否为空,为空直接返回。 - 循环条件改为
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
相关产品推荐
相关产品推荐

