You need to enable JavaScript to run this app. 链表归并排序(MergeSort)实现出现段错误(Segmentation fault),求代码排查
优惠活动
大模型
产品
解决方案
定价
更多

链表归并排序(MergeSort)实现出现段错误(Segmentation fault),求代码排查

链表归并排序代码的段错误原因定位
  • 核心Bug位于mergeSort函数的递归终止判断逻辑
    原代码书写的判断语句:

    if(head==NULL && head->next!=NULL){
        return head;
    }
    

    存在三处问题:

    1. 逻辑运算符误用:归并排序的递归终止条件应为「链表为空,或链表仅存1个节点(即head->next == NULL)」,两类场景满足任意一个就无需继续拆分递归,应使用逻辑或||,而非原代码的逻辑与&&
    2. 空指针解引用风险:若传入的head为NULL,判断分支中访问head->next的操作会直接触发段错误
    3. 终止逻辑完全失效:由于&&的短路特性,当head为有效非空节点时,第一个条件head==NULL不成立,整个判断结果恒为假,根本不会触发return返回分支,会引发两类连锁崩溃:
      • 单节点链表不会触发终止流程,会重复执行拆分、递归调用自身的逻辑,造成无限递归、栈溢出
      • 拆分得到的后半段链表为空时,传入mergeSort会直接在判断分支解引用空指针崩溃
        修正后的终止条件为:
    if (head == NULL || head->next == NULL) {
        return head;
    }
    
    
  • 其余模块逻辑校验:

    • findmiddle 采用快慢指针、fast初始值为head->next的实现正确,可准确定位链表前半段的尾节点,适配拆分需求
    • merge 函数通过双指针对比节点值、尾指针跟踪拼接的合并逻辑正确,无明显漏洞

内容的提问来源于stack exchange,提问作者praveen prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 18:36:04