这个程序运行不了 可是没看出错误 求帮看一下

#include
#include

typedef struct LNode
{
int data;
LNode* next;
}LNode, *LinkList;

void InitList (LinkList L)
{
L=(LinkList)malloc (sizeof(LNode));
L->next = NULL;
}

void UpList(LinkList L, int x)
{
LinkList p = L;
while(p->next)
{
p=p->next;
}

LinkList temp = (LinkList)malloc(sizeof(LNode));
temp->data = x;
temp->next = NULL;
p->next = temp;

}

void DisList(LinkList L)
{
LinkList p = L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}

void DestroyList(LinkList L)
{
LinkList p = L,q = p->next;
while(q!=NULL)
{
free(p);
p = q;
q = p->next;
free(p);
}
}

int Listlength(LinkList L)
{
if (L==NULL) {
return 0;
}
LinkList p = L;
int a = 0;
while(p->next!=NULL)
{
a++;
p = p->next;
}
return (a);
}

void StickList (LinkList ha,LinkList hb,LinkList hc ,int m,int n)
{
LinkList p = NULL;
if(m==0)
{
hc=hb;
free(ha);
}

else if(n==0)
{
    hc=ha;
    free(hb);
}

else if(m<n)
{
    p=ha->next;
    while(p->next != NULL)
        p=p->next;
    p->next = hb->next;
    hc=ha;
    free(hb);
}

else
{
    p=hb->next;
    while(p->next!=NULL)
        p=p->next;
    p->next = ha->next;
    hc=hb;
    free(ha);
}

}

int main() {

LinkList ha, hb, hc;
InitList(ha);

InitList(hb);
InitList(hc);

for (int i = 0;i<100;i++)
    UpList(ha,i);
printf("链表ha的元素有\n");
DisList(ha);
int m = Listlength(ha);

for(int j=0;j<100;j++)
    UpList(hb,j);
printf("链表hb的元素有\n");
DisList(hb);
int n = Listlength(hb);

StickList(ha,hb,hc, m, n);
printf("链表hc的元素有\n");
DisList(hc);
return 0;

}

 void InitList (LinkList L)
{
    L=(LinkList)malloc (sizeof(LNode));
    L->next = NULL;
}

这里就错了,你在函数里改变L,不会作用到实参上,你得用指针的指针。
InitList(ha);
此后ha还是null