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

单链表无法打印问题求助:代码无输出原因排查

问题分析与解决

嘿,我一眼就揪出问题所在了——你的addFirst函数根本没真正修改到main里的head指针!

核心原因:C语言的值传递机制

在C里,当你把head传给addFirst时,传递的是head的副本。你在函数里写ptr = tmp,只是改了这个副本的指向,完全碰不到main里原本的head——它自始至终都是NULL,printAll自然打印不出任何内容。

两种可行的解决办法

方法1:用指针的指针(双重指针)传参

修改addFirst的参数为link *(也就是struct node **),这样就能直接修改外部的head指针了:

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

typedef struct node * link;
struct node{
    int item;
    link next;
};

void printAll(link head);
void addFirst(link *ptr, int val ); // 修改参数为指针的指针
link removeLast(link ptr);

void printAll(link head){
    link ptr = head;
    printf("\nPrinting Linked List:\n");
    while(ptr != NULL){
        printf(" %d ", ptr->item); // 用ptr->item替代(*ptr).item,更简洁
        ptr = ptr->next;
    }
    printf("\n");
}

void addFirst(link *ptr, int val ){
    link tmp = malloc(sizeof(struct node));
    tmp->item = val;
    tmp->next = *ptr; // 指向原来的头节点
    *ptr = tmp; // 直接修改外部的head指针
}

int main(void) {
    link head = NULL;
    for(int i = 0; i<3; i++){
        addFirst(&head, i); // 传递head的地址
    }
    printAll(head);
    return 0;
}

方法2:让addFirst返回新的头指针

另一种思路是让函数返回更新后的头指针,main里用这个返回值来更新head:

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

typedef struct node * link;
struct node{
    int item;
    link next;
};

void printAll(link head);
link addFirst(link ptr, int val ); // 修改返回类型为link
link removeLast(link ptr);

void printAll(link head){
    link ptr = head;
    printf("\nPrinting Linked List:\n");
    while(ptr != NULL){
        printf(" %d ", ptr->item);
        ptr = ptr->next;
    }
    printf("\n");
}

link addFirst(link ptr, int val ){
    link tmp = malloc(sizeof(struct node));
    tmp->item = val;
    tmp->next = ptr;
    return tmp; // 返回新的头指针
}

int main(void) {
    link head = NULL;
    for(int i = 0; i<3; i++){
        head = addFirst(head, i); // 用返回值更新head
    }
    printAll(head);
    return 0;
}

额外小优化

你代码里的(*ptr).item和(*ptr).next可以换成ptr->item和ptr->next,这是C语言指针访问结构体成员的标准写法,更简洁易读。

现在运行修改后的代码,就能正常打印出2 1 0(因为每次往头部加元素,顺序是倒的)啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:15