程序总是崩溃 合并单链表
#define ElemType int/*线性表内数据类型定义为整形 */#define ERROR
#define OK
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{ElemType data;
struct Node* next;
}Node,* LinkList; /*链表的结构体建立&命名*/
InitList(LinkList* L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next==NULL;
}
void PriList(LinkList L)/*输出线性表内容的函数*/
{
LinkList p;
printf("\n链表内容为\n");
p=L->next;
while(p->next!=NULL)
{
p=p->next;
printf("%d\n",p->data);
}
}
void PriList1(LinkList L)/*输出线性表内容的函数*/
{
LinkList p;
printf("\n链表内容为\n");
p=L;
while(p->next!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
LinkList CreatFromTail(LinkList L)
{
free(L);
Node* r,* s;
r=L->next;
int flag=1;
int c;
printf("结束时请输入1000请输入\n");
while(flag)
{
scanf("%d",&c);
if(c!=1000)
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
return(L);
}
void RelectSortRiseList(LinkList L)
{
Node *first,*tail,*p,*pr,*min;
first=NULL;
while(L!=NULL)//当所有节点排序后都会脱离原来的链表,都脱离后原链表为空 结束循环
{
for(p=L,min=L;p->next!=NULL;p=p->next)
{
if(p->next->data<min->data)
{
pr=p;
min=p->next;//p->next是最小值所在的节点。
}
} //for循环是为找到最小值所在的节点
if(first==NULL)
{
first=min;
tail=min;
} //有序链表中无节点时。
else
{
tail->next=min;
tail=min;
}//if结构是为让最小值节点插入有序链表中
if(min==L)
{
L=L->next;
} //找到的最小节点是首节点时
else
{
pr->next=min->next;
} //if结构是为了让最小值节点脱离原来的链表
}
if(first!=NULL)
{
tail->next=NULL;
}
L=first;
}
LinkList MergeLinkList()
{
LinkList pa,pb,r;
LinkList LC,LA,LB;
InitList(&LC);
InitList(&LA);
printf("请建立链表LA\n");
LA=CreatFromTail(LA);
printf("\n请建立链表LB\n");
LB=CreatFromTail(LB);
RelectSortRiseList(LA);
RelectSortRiseList(LB);
pa=LA->next;
pb=LB->next;
LC=LA;
LC->next=NULL;
r=LC;
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==NULL)
{
r->next=pa;
}
else
r->next=pb;
PriList(LC);
free(LB);
return (LC);
}
int main()
{
LinkList L,L1;
InitList(&L);
InitList(&L1);
L1=MergeLinkList();
return 0;
}