链表合并为什么会报错,没结果该怎么改呢

输出没结果

#include
#include /* malloc()等 */
#include 
#include
#include/* exit() */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define ElemType
#define Maxsize 100
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
/*线性表的单链表存储结构 */
struct LNode
 {
   int ElemType data[Maxsize];
   struct LNode *next;
 };
typedef struct LNode *LinkList;
void InitList(LinkList *L)
{ /* 操作结果:构造一个空的线性表L */
   *L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */
   if(!*L) /* 存储分配失败 */
     exit(OVERFLOW);
   (*L)->next=NULL; /* 指针域为空 */
}
void CreateList(LinkList *L,int n){
    struct p;
    L=(LinkList*)malloc(sizeof(struct LNode));
    L->next=NULL;
    for(int i=n;i>0;--i){
        LinkList p=(LinkList)malloc(sizeof(struct LNode));
        scanf("%d",p->data);
        p->next=L->next;
        L->next=p;
    }
}
void ListTraverse(LinkList L)
{
   LinkList p=L->next;
   while(p)
   {
     printf("%3d",p->data);
     p=p->next;
   }
   printf("\n");
}
void MergeList(LinkList La,LinkList Lb,LinkList Lc){
    LinkList pa;
    LinkList pb;
    LinkList pc;
    pa=La->next;
    pb=Lb->next;
    Lc=pc=La;
    while(pa&&pb){
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        pc->next=pa?pa:pb;
        free(Lb);
    }
}
int main()
{
int n,m;
printf("输入表1中的元素个数");
scanf("%d",&n);
printf("输入表2中的元素个数:");
scanf("%d",&m);
LinkList La;
LinkList Lb;
LinkList Lc;
InitList(&La);
InitList(&Lb);
InitList(&Lc);
printf("创建表1\n");
CreateList(&La,n);
printf("创建表2\n");
CreateList(&Lb,m);
MergeList(La,Lb,&Lc);
printf("结果\n");
ListTraverse(Lc);
return 0;
}

你可以参考下我博客中的单链表操作,还有其他复杂操作。希望能帮到你