求指教:将有序的 2 个链表合为一个有序链表没错误,但输不出结果
#include<stdio.h>#include<stdlib.h>
#define ERROR 0
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &l)//初始化
{
l=(LinkList)malloc(sizeof(LNode));
l->next=NULL;
}
int CreaList(LinkList &l,int *a,int n)//建链表 ,&可以不用带,初始化时l就指向了头节点,以后不用改变l的值
{
LinkList p, q;//q指向尾节点
int i;
q=l;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
q->next=p;
p->data=a[i];
q=p;
}
q->next=NULL;
return 0;
}
void DispList(LinkList l)//输出
{
LinkList p;
p=l->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int DeleteList(LinkList &l,int i)//删除
{
LinkList p,q;
p=l;
q=l->next;
while(q!=NULL)
{
if(q->data==i)break;//用break终止此循环 ,多级连用是要注意NULL
p=p->next;
q=p->next;
}
if(q==NULL)return 0;/////////////////
p->next=q->next;
free(q);//释放q
return 1;
}
void mergelist(LinkList la,LinkList lb)//?????????????????????? 有序链表合为一个
{
LinkList pa,pb,pc,r;
int i;
pa=la->next;
pb=lb->next;
while(pa->next!=NULL)
pa=pa->next;
pa->next=pb;
free(lb);//将2个链表合成一个,释放lb
//DispList(la);
pa=la->next;
pc=pa->next;
while(pa->next)
{
while(pc)
{
if(pa->data==pc->data)
{
r=pc;//删除该节点后pc将无所指。。。。。。。。。
pc=pc->next;
DeleteList(la,r->data);
}
else if(pa->data>pc->data)
{
i=pa->data;
pa->data=pc->data;
pc->data=i;
pc=pc->next;
}
else
{
pc=pc->next;
}
}
pa=pa->next;
pc=pa->next;
}
}
int main()
{
LinkList la,lb;
int a[10],b[10];
int i,m,n;
InitList(la);
InitList(lb);
printf("集合A中元素个数为:\n");
scanf("%d",&m);
printf("输入A中元素数为:\n");
for(i=0;i<m;i++)
{
//getchar();
scanf("%d",&a[i]);
}
CreaList(la,a,m);
printf("A是:\n");
DispList(la);
printf("集合B中元素个数为:\n");
scanf("%d",&n);
printf("输入B中元素数为:\n");
for(i=0;i<n;i++)
{
//getchar();
scanf("%d",&b[i]);
}
CreaList(lb,b,n);
printf("B是:\n");
DispList(lb);
mergelist(la,lb);
printf("AUB是:\n");
DispList(la);
}