####问题发生背景:数据结构中两个单链表合并失败
####错误信息: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);
}