数据结构中两个单链表合并失败

####问题发生背景:数据结构中两个单链表合并失败
####错误信息:LinkList pa=LA->next;


#define MAXSIZE 12
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef int Status;


typedef struct
{
    int example;
}ElemType;

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

int main()
{
void CreateList_R(LinkList L,int n);
void MergeList_L(LinkList LA,LinkList LB,LinkList LC);

LinkList LA,LB,LC;
printf("请输入集合A中元素:\n");
CreateList_R(LA,2);
printf("请输入集合B中元素:\n");    
CreateList_R(LB,3);
MergeList_L(LA,LB,LC);
LinkList p=LC->next;
printf("%d",p->data);

} 


void MergeList_L(LinkList LA,LinkList LB,LinkList LC)
{
    LinkList pa=LA->next;
    LinkList pb=LB->next;
    LC=LA;
    LinkList pc=LC;
    
    while(pa&&pb)
    {
        if((pa->data).example<=(pb->data).example)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
            
        }
    }
    pc->next=pa?pb:pb;
    free(LB);
}

void CreateList_R(LinkList L,int n)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    LinkList r=L;
    int i;
    for(i=0;i"%d",&(s->data));
        s->next=NULL;
        r->next=s;
        r=s;        
    }
}

```c
    

####详细报错:Program recevied signal SIGSEGV.Segementation fault;。
####尝试方法:通过调试得到报错语句后上网查阅报错信息。但无法理解指针为什么不能被赋值给已经开辟的空间。



###希望各位掌握相关知识的友友不吝赐教

你好,看了你的代码,是存在问题的。
你前面定义了LC为空,在里面使用的时候虽然用LA
做了赋值操作,这没问题。
有问题的是后面,你把pc.next指向pa,那不是自己指向自己了吗,死循环了呀。

报错的位置发给我看一下

经过各位友友的提醒帮助,已成功运行。

#include <stdio.h>
#include <malloc.h>

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

int main()
{
void CreateListR(LinkList&L,ElemType a[],int n);
void DispList(LinkList L);
void Merge(LinkList L1,LinkList L2,LinkList&L3);
void DestroyList(LinkList&L);

LinkList L1,L2,L3;
ElemType a[]={3,5,8,11};
int n=4;
CreateListR(L1,a,n);
printf("L1:");DispList(L1);
ElemType b[]={2,6,8,9,11,15,20};
n=7;
CreateListR(L2,b,n);
printf("L2:");DispList(L2);
printf("L1和L2合并产生L3\n");
Merge(L1,L2,L3);
printf("L3:");DispList(L3);
DestroyList(L3);
return 1;
}

void CreateListR(LinkList&L,ElemType a[],int n)//尾插法建立单链表表 
{
    LinkList s,r;
    L = (LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    r=L;
    for(int i=0;i<n;i++)
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->data=a[i];
        r->next=s;
        r=s;
    } 
    r->next=NULL;
}

void DispList(LinkList L)//输出线性表 
{
    LinkList p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

void Merge(LinkList L1,LinkList L2,LinkList&L3)//合并
{
    LinkList p=L1->next,q=L2->next,r;
    L3=L1;
    r=L3;
    
    while(p&&q)
    {
        if((p->data)<=(q->data))
        {
                r->next=p;r=p;p=p->next;
        }
        else
        {
            r->next=q;r=q;q=q->next; 
        } 
    }
    r->next=p?p:q;
    free(L2);
}


void DestroyList(LinkList&L)//销毁线性表 
{
    LinkList pre =L,p=pre->next;
    while(p!=NULL)
    {
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);
}