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

HackerRank提交链表首尾节点求和代码报段错误原因排查

存在两个核心问题导致段错误:

1. 反转链表函数的传参逻辑错误

你当前的reverseList是值传递指针,函数内部给head = prev的赋值仅修改了局部变量,调用函数后外部的head2仍然指向反转前的旧头结点,且原第二个链表的节点指针已经被打乱,后续访问必然出现非法内存访问。
修正方案:修改reverseList为返回反转后的新头节点,用返回值更新head2:

SinglyLinkedListNode* reverseList(SinglyLinkedListNode* head)
{
  SinglyLinkedListNode* prev = NULL;
  SinglyLinkedListNode* curr = head;
  SinglyLinkedListNode* next = NULL;

  while(curr)
 {
   next = curr->next;
   curr->next= prev;
   prev = curr;
   curr = next;
 }
  return prev;
}

调用的时候改成head2 = reverseList(head2);

2. 求和循环的判断条件错误

你使用的while(ptr1 || ptr2)会在其中一个指针为空时仍然进入循环,此时访问空指针的data属性会直接触发段错误。因为你拆分后的两个链表,要么长度相等(原链表偶数长度),要么第一个链表比第二个长1(原链表奇数长度),仅需在两个指针都不为空时计算和即可。
修正方案:将循环条件改为:

while(ptr1 && ptr2)

边界处理补充(可选,避免单节点输入报错)

如果题目允许输入链表长度为1,可在函数开头加判断:

if(head->next == NULL) return head->data;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:04