这个怎么运行不了?????

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int value;
struct LNode *next;
}LNode,*Linklist;
Linklist list_TailInsert(Linklist &L)
{ int value;
LNode *head = L,*rear = L;
L = (Linklist)malloc(sizeof(LNode));
head->next = NULL;
head->value = NULL;
printf("请输入链表每一个结点的值,输入9999代表结束:");
scanf("%d",&value);
while(value != 9999)
{
LNode *s;
s = (Linklist)malloc(sizeof(LNode));
s->value = value;
s->next=NULL;
rear->next = s;
rear = s;
scanf("%d",&value);
}
rear->next = NULL;
}
void reverseOutput(Linklist L)
{
if(L->next == NULL)
{
return;
}
else
{ reverseOutput(L->next);
printf("%d ",L->next->value);

 } 

}
int main()
{
Linklist L1;
list_TailInsert(L1);
reverseOutput(L1);
return 0;
}

你LNode *head = L, *rear = L;不应该放在L = (Linklist)malloc(sizeof(LNode));后面吗,L的初始值是0,你head=L就是把head=0,然后你让L指向新分配的内存,head->next相当于访问内存地址0的数据,自然运行不了

代码修改如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
    int value;
    struct LNode *next;
}LNode,*Linklist;
Linklist list_TailInsert(/*Linklist &L*/) //C没有引用,这里的参数传进来也没用,有返回值了就不用传参数进来了
{ 
    int value;
    struct LNode *head ,*rear ;//= L; //这里L没有初始化,给rear赋值没用,放在下面
    head = (struct LNode*)malloc(sizeof(struct LNode)); //L不用了,直接用head就可以了

    //head = L;
    rear = head;
    
    head->next = NULL;
    head->value = NULL;
    printf("请输入链表每一个结点的值,输入9999代表结束:");
    scanf("%d",&value);
    while(value != 9999)
    {
        LNode *s;
        s = (Linklist)malloc(sizeof(LNode));
        s->value = value;
        s->next=NULL;
        rear->next = s;
        rear = s;
        scanf("%d",&value);
    }
    rear->next = NULL;
    return head; //这里返回链表的头结点
}
void reverseOutput(Linklist L)
{
    if(L->next == NULL)
    {
        return;
    }
    else
    { reverseOutput(L->next);
    printf("%d ",L->next->value);

    } 
}
int main()
{
    Linklist L1; 
    L1 = list_TailInsert(/*L1*/);
    reverseOutput(L1);
    return 0;
}