这里做的工作有很大局限性:未考虑两链表中序号相同时怎么办;
表一必须是有序的,表二可以是无序的,这样能排序;
感觉两个都是乱序的很难弄。
但调了很久,记下纪念。
#include
#include
#include
#define LA 4
#define LB 4
#define NULL 0
struct student
{int num;
char name[8];
struct student *next;
}a[LA],b[LB];
void main()
{struct student a[LA]={{101,"Wang"},{102,"LI"},{105,"zhang"},{106,"Wei"}};
struct student b[LB]={{108,"Zhang"},{104,"Ma"},{107,"Guo"},{100,"Lui"}};
int i;
struct student *p,*pt,*p1,*p2,*head1,*head2,*p3,*p4;
head1=a;
head2=b;
printf("list a:\n");
for(p1=head1,i=1;p1
{
pt=p1;
p1->next=a+i;
printf("%8d%8s\n",p1->num,p1->name);
p1=p1->next;
}
pt->next=NULL;
printf("list b:\n");
for(p2=head2,i=1;p2
{p=p2;
p2->next=b+i;
printf("%8d%8s\n",p2->num,p2->name);
p2=p2->next;
}
p->next=NULL;
printf("\n");
p1=head1;
p2=head2;
p3=head1;
while(1)
{
while(p1->numnum)
{
if(p1->next==NULL)
{
if(p2->next!=NULL)
{
p1->next=p2;
p4=p2->next;
p2->next=NULL;
p3=p1;
p1=p2;
p2=p4;
}
else
{
p1->next=p2;
goto loop;
}
}
else
{
p3=p1;
p1=p1->next;
}
// printf("%7d %7s\n",p3->num,p3->name);
//printf("%7d %7s\n",p1->num,p1->name);
// printf("\n");
}
while(p1->num>p2->num)
{
if(p2->next!=NULL)
{
if(p1!=head1)
{
if(p3->numnum)
{
p3->next=p2;
p4=p2->next;
p2->next=p1;
p3=p2;
p2=p4;
}
else
{
p1=head1;
p3=head1;
break;
}
}
else
{
p3=p2;
p4=p2->next;
p2->next=p1;
p3=p2;
head1=p3;
p2=p4;
}
}
else
{
if(p1!=head1)
{
if(p3->numnum)
{
p3->next=p2;
p2->next=p1;
goto loop;
}
else
{
p1=head1;
p3=head1;
break;
}
}
else
{
p3=p2;
p2->next=p1;
head1=p3;
goto loop;
}
}
}
}
loop: ;
p1=head1;
printf("\n result:\n");
while(p1!=NULL)
{
printf("%7d %7s\n",p1->num,p1->name);
p1=p1->next;
}
system("pause");
}