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

调用insertNodeToEnd与displayNode后无输出,链表代码问题排查

单链表插入节点后无输出的问题排查

你的代码核心问题出在insertNodeToEnd函数的实现上,直接访问空指针成员导致程序触发未定义行为(大概率是提前崩溃,所以没机会执行到displayNode的输出逻辑)。具体问题和修复方案如下:

1. 致命错误:空指针解引用

当遍历到链表尾部时,curr->next的值是NULL,你直接执行curr->next->data = data,这属于对空指针的非法解引用,会直接导致程序异常终止,自然看不到任何输出。

2. 逻辑错误:未创建新节点

向链表尾部插入节点的正确逻辑是先创建一个新的Node对象,再将其挂载到链表尾部,而不是直接给空指针的成员赋值。

修复后的完整代码

#include <iostream>
using namespace std;

struct Node{
    int data;
    Node* next;
};

void displayNode(Node* head ){
    while(head!=NULL){
        cout<<head->data<<endl;
        head = head->next;
    }
}

// 修复后的尾部插入函数
void insertNodeToEnd(Node* curr , int data){
    while(curr->next != NULL){
        curr = curr->next;
    }
    // 1. 先创建新节点并初始化
    Node* newNode = new Node;
    newNode->data = data;
    newNode->next = NULL;
    // 2. 将新节点挂载到链表尾部
    curr->next = newNode;
}

int main(){
    Node* Head = new Node;
    Head->next = NULL;
    Head->data = 500;
    Node *iter = Head;
    for(int i = 0 ; i<5 ; i++){
        insertNodeToEnd(iter,i*10);
    }   
    displayNode(Head);
    
    // 额外提醒:实际开发中要记得遍历链表释放内存,避免内存泄漏
    return 0;
}

额外优化点

  • 你定义的全局变量Node* head;没有被使用,可以直接删除,避免冗余。
  • 循环中iter始终指向链表头,直接传Head给insertNodeToEnd函数效果完全一致,不需要额外定义iter变量。

内容的提问来源于stack exchange,提问作者Mehmet ÖNAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:19