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

C++链表代码运行后无输出,请求排查解决

问题分析与修复

你的代码运行无输出的核心问题是尾插函数insertatend中,新创建的节点next指针未初始化为NULL,导致链表遍历触发未定义行为(比如无限循环或访问非法内存,程序直接崩溃),终端无法正常输出内容。

具体问题点

  • 尾插节点未终止链表:用malloc分配内存时不会自动初始化成员变量,新节点的next是随机垃圾值而非NULL。遍历链表到最后一个节点时,p->next不为空,printlist的while循环会持续访问非法内存,程序崩溃无法完成输出。
  • 可选优化:C++规范问题:malloc是C语言内存分配方式,C++中更推荐用new,虽不影响功能,但更符合语言规范。

修复后的代码

#include <iostream>
#include <string>
using namespace std;

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

struct node *head = NULL;

// 打印链表
void printlist(){
    struct node *p = head;
    cout << "\n[";

    while(p != NULL) {
        cout << " " << p->data << " ";
        p = p->next;
    }
    cout << "]" << endl; // 强制刷新输出缓冲区
}

// 头插节点
void insertatbegin(int data){
    struct node *lk = new node; // 替换malloc为new
    lk->data = data;
    lk->next = head;
    head = lk;
}

// 尾插节点
void insertatend(int data){
    struct node *lk = new node;
    lk->data = data;
    lk->next = NULL; // 关键:设置新节点next为NULL,终止链表
    struct node *linkedlist = head;

    // 边界处理:链表为空时直接将head指向新节点
    if (linkedlist == NULL) {
        head = lk;
        return;
    }

    while(linkedlist->next != NULL) {
        linkedlist = linkedlist->next;
    }
    linkedlist->next = lk;
}

int main(){
    insertatbegin(12);
    insertatend(22);
    insertatend(30);
    insertatend(44);
    insertatend(50);
    cout << "Linked List: ";

    printlist();
    return 0;
}

修复说明

  • 给尾插的新节点添加lk->next = NULL,确保链表末尾正确终止,遍历能正常结束。
  • 增加链表为空时尾插的边界处理,让代码更健壮。
  • 用new替代malloc,符合C++编程习惯。
  • 在printlist末尾加endl,强制刷新输出缓冲区,确保内容及时打印到终端。

运行修复后的代码,即可得到预期输出:

Linked List:
[ 12 22 30 44 50 ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:42:41