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

C语言链表print_list函数无法打印元素问题求助

问题根源:返回值错误导致链表头丢失

你的riempilista函数犯了一个关键错误:你没有返回自己构建好的链表头节点,反而返回了一开始传入的lis(也就是NULL)。

在main函数里,你把listautente初始化为NULL传给riempilista后,函数内部确实构建了链表,但最后返回的还是原来的NULL,所以listautente依然是NULL,print_list自然只会输出START -> END。而你把打印代码放进构建函数时,用的是函数内部的temp或currentNode,那是正确的链表节点,所以能正常打印。

修正步骤

  • 在riempilista函数里新增变量保存链表的头节点(第一个创建的节点),而非只记录temp(temp最后指向的是链表尾节点)。
  • 最后返回这个头节点,而不是传入的初始lis。
  • 处理用户输入n=0的情况,避免temp未初始化就访问temp->next导致崩溃。

修正后的代码

#include <stdlib.h>
#include <stdio.h>

typedef struct nd
{
    int val;
    struct nd *next;
} node;
typedef node * Lista;

void print_list(node*currnode)
{
    printf("START -> ");
    while (currnode != NULL)
    {
        printf("%d -> ", currnode->val);
        currnode = currnode->next;
    }
    printf("END\n"); // 加换行符优化输出格式
}

// riempilista means "buildlist"
node* riempilista(Lista lis){
    node  *currentNode, *temp, *head = NULL; // 新增head保存链表头节点
    int i,n;
    
    printf("how many nodes?\n");
    scanf("%d",&n);

    if (n == 0) { // 处理空链表情况
        return NULL;
    }

    for (i = 0; i < n; i++)
    {
        currentNode = (node *)malloc(sizeof(node));
  
        printf("Enter element %d : ", (i + 1));
        scanf("%d", &currentNode->val);
        
        if (i == 0)
        {
            head = currentNode; // 第一个节点就是链表头
            temp = currentNode;
        }
        else
        {  
            temp->next = currentNode;
            temp = currentNode;
        }
    }

    temp->next = NULL;
    return head; // 返回真正的链表头节点
}

int main(){
    Lista listautente=NULL;
    listautente=riempilista(listautente);
    print_list(listautente);
    // 新增内存释放代码,避免内存泄漏(新手可先养成习惯)
    node* temp = listautente;
    while (temp != NULL) {
        node* next = temp->next;
        free(temp);
        temp = next;
    }
    return 0;
}

关键说明

  1. head变量专门记录链表的第一个节点,这才是需要返回给main的链表入口指针。
  2. 增加n=0的判断,避免空链表场景下的非法内存访问。
  3. 返回head而非初始传入的lis,确保main中的listautente能拿到有效链表头。
  4. 补充内存释放代码,养成良好的内存管理习惯,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:35:48