该链表只能递增输入,不能输入比前一个小的数,并且新生成的第三条链表不能有重复的数据
#include<stdio.h>
#include<stdlib.h>
typedef struct Link
{
int date;
struct Link *next;
} link;
link*Generate()//生成链表并存储数据
{
link *p=(link*)malloc(sizeof(link));
p->next=NULL;
link *temp=p;
int *tt,ee;
tt=ⅇ
printf("请输入链表元素个数:") ;
scanf("%d",&ee);
int n,m;//
for(int i=1;i<=*tt;i++)
{
link *a=(link*)malloc(sizeof(link));
printf("请输入数据:");
scanf("%d",&a->date);
m=a->date;
if(i>=2)
{
while(m<=n)//使其只能递增输入存储数据
{
printf("请输入比前一个大的数:\n");
scanf("%d",&a->date);
m=a->date;
}
}
n=a->date;
a->next=NULL;
temp->next=a;
temp=temp->next;
}
return p;
}
int jishuan(link *k)//统计单条链表元素个数
{
link *mm=k->next;
int qq=0;
while(mm)
{
qq+=1;
mm=mm->next;
}
return (qq);
}
link * Aggregate(link * L1,link * L2)//将两条链表合并为一条新链表
{
link * L = (link *)malloc(sizeof(link));
L->next = NULL;
link * b = L1->next;
link * d = L2->next;
link * r = L;
int c=4,i=1;
while(c>2)
{
if(i==1)
{
int cc=0;
cc=jishuan( L1);
for(int a=1;a<=cc;a++)
{
r->next=b;
r=b;
b=b->next;
}
i+=1;
}
else
{
int gg=0;
gg=jishuan(L2);
for(int a=1;a<=gg;a++)
{
link * t=L->next;
int o=1,k=1,s=1;
do
{
if (t->date==d->date)
{ o=2;
break;
}
if(t->next==NULL)
{
s=2;
}
t=t->next;
}while (s!=2);
if(o==1)
{
r->next = d;
r = d;
d = d->next;
}
else
{ d = d->next;
continue;
}
}
}
c-=1;
}
L1->next = NULL;
L2->next = NULL;
return L;
}
void *Outputs(link *L)//输出链表元素
{
link *f=L->next;
while(f)
{
printf("%d ",f->date);
f=f->next;
}
printf("\n");
}
int main()
{
system("color FD") ;//改变输出字体颜色
link *L1;
link *L2;
link *L3;
printf("请输入L1的数值\n");
L1=Generate();
printf("请输入L2的数值\n");
L2=Generate();
printf("即将输出L3的数值\n");
Outputs(L1);
Outputs(L2);
L3=Aggregate(L1,L2);
Outputs(L3);
}