删除的那个函数不被调用,怎么回事

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

LNode 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);
}
}
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(p->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;

}

LNode *p;
if(L->value == NULL)
{
return;
}
if(p->value == value)  //这里p都没有赋值呢 这句前加 p = L;
{