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

无尾节点链表末尾添加元素触发Segmentation fault问题求助

链表AddLast方法段错误的修复方案

错误原因分析

  • 循环终止后curr为空指针:原代码中while (curr != NULL)的循环会一直遍历到curr变成NULL才停止,此时访问curr->next相当于操作空指针的成员,直接触发段错误。正确的逻辑应该是遍历到链表的最后一个有效节点(即curr->next == NULL的节点)。
  • 未处理链表为空的边界场景:如果链表初始为空(head是NULL),curr初始值就是NULL,循环不会执行,直接执行curr->next = new_node同样会触发空指针访问错误。

修复后的AddLast代码

void LinkedList :: AddLast(int data)
{
     Node *new_node = new Node;
     new_node -> data = data;
     new_node -> next = NULL;

     // 处理链表为空的情况,直接将新节点设为头节点
     if (head == NULL)
     {
         head = new_node;
         return;
     }

     Node *curr = head;
     // 遍历到最后一个有效节点(该节点的next为NULL)
     while (curr->next != NULL)
     { 
         curr = curr -> next;
     }

     curr -> next = new_node;
}

修复说明

  1. 先判断链表是否为空,若为空则直接将新节点赋值给head,避免后续空指针操作。
  2. 循环条件修改为curr->next != NULL,确保循环结束时curr指向链表的最后一个有效节点,此时给curr->next赋值新节点即可正确完成尾插操作。

内容的提问来源于stack exchange,提问作者Venkatesh B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:15:35