各位大神看下我这个算法
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
# define TRUE 1
# define ERROR 0
# define OK 1
# define OVERFLOW -2
# define FALSE 0
typedef struct lnode
{
int data;
struct lnode *next;
} *linklist;
int getelem(linklist la,int i,int &e)
{
linklist p;
int j=1;
p=la->next;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR;
e=p->data;
return OK;
}
void creatlist(linklist &l,int n){
l=(linklist)malloc(sizeof(lnode));
l->next=NULL;
for(int i=n;i>0;--i)
{
linklist p;
p=(linklist)malloc(sizeof(lnode));
scanf("%d",&p->data);
p->next=l->next;
l->next=p;
}
}
int listinsert(linklist &l,int i,int e)
{
linklist p;
int j=1;
p->next=l;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
linklist s;
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
void Union(linklist &la,linklist lb)//重点就是这个函数
{
int e,f;
int k=1,m=1;
linklist p,b;
p=la->next;
while(p)
{
p=p->next;
k++;
}
b=lb->next;
while(b)
{
b=b->next;
m++;
}
for(int j=1;j<=m;j++)
{
for(int i=1;i<=k;i++)
{
getelem(la,i,e);
getelem(lb,j,f);
if(e==f)
break;
}
if(i>k)
listinsert(la,i,f);
}
}
void mergelist(linklist la,linklist lb,linklist &lc)
{
linklist pa,pb,pc;
pa=la->next;
pb=lb->next;
lc=pc=la;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else
{
pc->next=pb;pc=pb;pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(lb);
}
void main()
{
linklist la,lb,lc;
creatlist(la,2);
creatlist(lb,3);
Union(la,lb);
while(la->next)
{
printf("2%d",la->next->data);
la=la->next;
}
/* creatlist(la,5);//这一段先不管 只运行UNION函数,每次都被关闭了
creatlist(lb,5);
mergelist(la,lb,lc);
while(lc->next)
{
printf("lc=%d",lc->next->data);
lc=lc->next;
}
*/
}