无尾节点链表末尾添加元素触发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; }
修复说明
- 先判断链表是否为空,若为空则直接将新节点赋值给
head,避免后续空指针操作。 - 循环条件修改为
curr->next != NULL,确保循环结束时curr指向链表的最后一个有效节点,此时给curr->next赋值新节点即可正确完成尾插操作。
内容的提问来源于stack exchange,提问作者Venkatesh B
相关产品推荐
相关产品推荐

