这个删除的函数没有运行,最后一个打印也没有运行

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int value;
struct LNode *next;
}LNode,*Linklist;

Linklist list_TailInsert(Linklist &L)
{
int value;
L = (Linklist)malloc(sizeof(LNode));
LNode *head =L,*rear = L;
head->next = NULL;
head->value = NULL;
printf("请输入链表各个节点的值,输入9999表示结束:");
scanf("%d",&value);
while (value != 9999)
{
if(head->value== NULL)
{
head->value = value;
}
else
{
LNode *s;
s = (Linklist )malloc(sizeof(LNode));
s->value = value;
s->next=NULL;
rear->next = s;
rear = s;
}
scanf("%d",&value);
}
return L;
}
void Display(Linklist L)
{
LNode *p = L ;
while(p != NULL)
{
printf("%d ",p->value);
p = p->next;
}
}
void Del_x_3(Linklist &L,int value)
{
LNode *p;
if(L->value == NULL)
{
return;
}
if(L->value == value)
{
p=L;
L = L->next;
free(p);
Del_x_3(L,value);
}
else
{
Del_x_3(L->next,value);
}

}
int main()
{
Linklist L1;
list_TailInsert(L1);
Display(L1);
Del_x_3(L1,2);
Display(L1);

return 0;

}

void Del_x_3(Linklist &L,int value)这个函数的第一个参数是引用,在c里面是没有引用这个东西的,应该改成void Del_x_3(Linklist *L,int value)。
还有就是在void Del_x_3(Linklist &L,int value)函数中,为什么L->value == NULL就退出了,这里是不是应该改成L->next ==NULL

if(L == NULL)//if(L->value == NULL)

void Display(Linklist L)
{
       LNode *p = L ;
       while(p != NULL)
       {
            printf("%d ",p->value);
            p = p->next;
       }
       printf("\n");
}
void Del_x_3(Linklist &L,int value)
{
       LNode *p=L;
       if(L == NULL)//if(L->value == NULL)
       {
             return;
       }
       if(L->value == value)
       {
             p = L;
             L = L->next;
             free(p);
             Del_x_3(L,value);
       }
       else
       {
             Del_x_3(L->next,value);
       }
}