ListInsert(LinkList L,int i,ElemType e)是一个函数 在程序中运行不了 我现在把他单独弄出来调试 帮我看看哪里有问题好吗?

问题遇到的现象和发生背景
操作环境、软件版本等信息
尝试过的解决方法
我想要达到的结果

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
struct LNode {
ElemType data;
struct LNode *next;
};
typedef struct LNode *LinkList,LNODE;
void ListInsert(LinkList L,int i,ElemType e);
int main(){
int i;
LinkList L;
for(i=1;i<4;i++)
{
ListInsert(L,i,i+1);
}
while(L!=NULL){
printf("%d ",L->data);
L=L->next;
}
return 0;
}
void ListInsert(LinkList L,int i,ElemType e){//插入

LinkList p=L,q;
q=(LinkList)malloc(sizeof(LNODE));
q->data=e;
if(i==1) L=q,q->next=NULL;
else{
while(i>1){
    p=p->next;
    i--;
} 
q->next=p->next;
p->next=q;

}
}