数据结构链表简单操作,小弟我到底错在哪了

数据结构链表简单操作,我到底错在哪了
很简单的链表操作,我用的C语言,我想应该不是参数按值传递的错误吧,希望大家看看,我到底错在哪里?
vc6,运行时显示个10,就奔溃了!谢谢。

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

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
typedef int status;
typedef int elemType;

typedef struct linkNode
{
elemType date;
struct linkNode *next;
} linkNode,*linkList;

void initList(linkList L)
{
L = (linkList)malloc(sizeof(linkNode));
if (!L)
exit(OVERFLOW);

L->next = NULL;
}


status listInsert(linkList L, int i, elemType e)
{
int j = 0;
linkList p = L, q;

while (p != NULL && j < i - 1)
{
j++;
p = p->next;
}

if (!p || i < 1)
return ERROR;

q = (linkList)malloc(sizeof(linkNode));
if (!q)
exit(OVERFLOW);

q->date = e;
q->next = p->next;
p->next = q;

return OK;
}

void traverseList(linkList L)
{
linkList p = L->next;
while (p)
{
printf("%d\t",p->date);
p = p->next;
}
printf("\n");
}



void main()
{

linkNode La;
initList(&La);

listInsert(&La,1, 10);
traverseList(&La);
printf("hah");


------解决思路----------------------

void main()
{

linkNode La;  //这定义了结构体已经分配了空间
        La.next = NULL;
//initList(&La);

listInsert(&La,1, 10);
traverseList(&La);
printf("hah");



或者
void initList(linkList *L)
{
*L = (linkList)malloc(sizeof(linkNode));
if (!L)
exit(OVERFLOW);

(*L)->next = NULL;
}
void main()
{

linkList La;
initList(&La);

listInsert(La,1, 10);
traverseList(La);
printf("hah");