程序一运行就卡死,感觉是传参有问题,求解答

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

//构建链式表
typedef struct Lnode{
    int date;
    struct Lnode *next;
}Lnode,*LinkList;

//插入一整个链表(头插法)
void CreateList_H(LinkList L,int n){
    L=(Lnode*)malloc(sizeof(Lnode));
    L->next=NULL;
    int i;
    for(i=0;i<n;i++){
                LinkList p=(Lnode*)malloc(sizeof(Lnode));
                scanf("%d",&p->date);
                p->next=L->next;
                L->next=p;
    }
}

int main()
{
    int i,j;
    scanf("%d",&i);
    LinkList L,q;
    CreateList_H(L,i);
    q=L->next;
   for(j=0;j<i;j++){
                printf("%d",q->date);
                q=q->next;
    }
    return 0;
}

链表的头结点没有返回。
代码修改如下:

#include <stdio.h>
#include <stdlib.h>
//构建链式表
typedef struct Lnode{
    int date;
    struct Lnode *next;
}Lnode,*LinkList;
//插入一整个链表(头插法)
LinkList CreateList_H(LinkList L,int n){  //返回链表头
    L=(Lnode*)malloc(sizeof(Lnode));
    L->next=NULL;
    int i;
    for(i=0;i<n;i++){
        LinkList p=(Lnode*)malloc(sizeof(Lnode));
        scanf("%d",&p->date);
        p->next=L->next;
        L->next=p;
    }
    return L;
}
int main()
{
    int i,j;
    scanf("%d",&i);
    LinkList L=0,q;
    L = CreateList_H(L,i);
    q=L->next;
    for(j=0;j<i;j++){
        printf("%d",q->date);
        q=q->next;
    }
    return 0;
}

在函数中给指针参数分配空间是没用的,不能改变传入参数的指针值