力扣2807. 在链表中插入最大公约数

文章讨论了一个编程问题,关于在实现插入GreatestCommonDivisors(GCD)功能时,由于未正确处理链表头可能为空的情况,导致`nullpointer`错误。作者指出了错误原因并提供了修正代码片段。
摘要由CSDN通过智能技术生成

runtime error: member access within null pointer of type 'struct ListNode' [solution.c]报错:

循环判断条件(p->next!=NULL),p是空指针,p->next即空指针的next----------->这么写是错误的

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
int MAxdivisor(int m, int n) {
    int r = m % n;
    while (r != 0) {
        m = n;
        n = r;
        r = m % n;
    }
    return n;
}
struct ListNode* insertGreatestCommonDivisors(struct ListNode* head) {
    ListNode *temp, *p;
    p = head->next;
    while (p->next != NULL) {
        temp = (ListNode*)malloc(sizeof(ListNode));
        temp->val = MAxdivisor(p->val, p->next->val);
        temp->next = p->next;
        p->next = temp;
        p = temp->next;
    }
    return head;
}

原题中,链表头head也存储了数据(原题是结点数目大于等于1),而我直接p=head->next(20行),这样是不对的;可能只有一个结点,那么head->next就是NULL,(21行)p->next就是NULL(空指针)的下个指针,可以当成是野指针;于是出现上述错误。

代码错误原因:

1>没有搞清楚原来这个题目链表头结点也存储了数据

2>改正:(20行)p=head->next改成p=head。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值