这段代码为什么没有输出

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;

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

void creatList(LinkList L,int data)
{
Node *r=L,q;
while(r->next)
{
r=r->next;
}
q=(Node
)malloc(sizeof(Node));
q->data=data;
q->next=r->next;
r->next=q;
}

LinkList Listhebing(LinkList A,LinkList B)//合并链表A,B
{
Node *pa,*pb,*r;
pa=A->next;
pb=B->next;
LinkList C;
C=A;
C->next=NULL;
r=C;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<=pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else
{
r->next=pb;
r=pb;
pb=pb->next;
}

}
    if(pa)
        r->next=pa;
    else
        r->next=pb;
    return C;

}

void Listnz(LinkList L)//链表的逆置
{
Node *p,*q;
p=L->next;
L->next=NULL;
while(p){
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
}

void printF(LinkList L)
{
Node *q;
q=L->next;
while(q)
{
printf("%d ",q->data);
q=q->next;
}

}

int main()
{
int elenuma,elenumb,data;
scanf("%d %d",&elenuma,&elenumb);
LinkList A,B,C;
InitList(&A);
InitList(&B);
for(int i=0;i<elenuma;i++)
{
scanf("%d",&data);
creatList(A,data);
}
for(int i=0;i<elenumb;i++)
{
scanf("%d",&data);
creatList(B,data);
}
Listhebing(A,B);
printF(C);
Listnz(C);
printF(C);
return 0;
}

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int    data;
    struct Node *next;
}Node,*LinkList;

void InitList(LinkList *L)
{
    (*L)=(LinkList)malloc(sizeof(Node)); //修改
    (*L)->next=NULL;
}

void creatList(LinkList L,int data)
{
    Node *r = L,*q;
    while(r->next)
    {
        r = r->next;
    }
    q=(Node*)malloc(sizeof(Node));
    q->next = NULL;  //修改
    q->data=data;
    r->next = q;  //q->next=r->next;修改
    r = q;        //r->next=q;      修改
}
LinkList Listhebing(LinkList A,LinkList B)//合并链表A,B
{
    Node *pa,*pb,*r;
    pa = A->next;
    pb = B->next;
    LinkList C = (LinkList)malloc(sizeof(Node)); //修改
    //C=A;                  //修改
    C->next = NULL;
    r = C;
    while(pa!=NULL&&pb!=NULL)
    {
        if(pa->data<=pb->data)
        {
            r->next=pa;
            r = pa;
            pa = pa->next;
        }
        else
        {
            r->next = pb;
            r = pb;
            pb = pb->next;
        }
    }
    if(pa)
        r->next=pa;
    else
        r->next=pb;
    free(A);         //修改
    free(B);         //修改
    return C;
}
void Listnz(LinkList L)//链表的逆置
{
    Node *p,*q;
    p = L->next;
    L->next=NULL;
    while(p){
          q = p;
          p=p->next;
          q->next=L->next;
          L->next=q;
    }
}
void printF(LinkList L)
{
    Node *q;
    q = L->next;
    while(q)
    {
        printf("%d ",q->data);
        q=q->next;
    }
    printf("\n"); //修改
}

int main()
{
    int elenuma,elenumb,data;
    scanf("%d %d",&elenuma,&elenumb);
    LinkList A,B,C;
    InitList(&A);
    InitList(&B);
    for(int i=0;i<elenuma;i++)
    {
        scanf("%d",&data);
        creatList(A,data);
    }
    for(int i=0;i<elenumb;i++)
    {
        scanf("%d",&data);
        creatList(B,data);
    }

    C = Listhebing(A,B); //修改
    printF(C);

    Listnz(C);
    printF(C);

    return 0;
}