思路:
把其中一个链表每个结点的数有序插入到另一个链表
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
int num;
struct student *next;
}stu,*pstu;
pstu list_sort(pstu *head,pstu *tail,int i)
{
pstu pnew=(pstu)calloc(1,sizeof(stu));
pstu ppre,pcur;
pnew->num=i;
ppre=pcur=*head;
if(NULL==pcur)
{
*head=*tail=pnew;
return *head;;
}else if(i < pcur->num ) //头插
{
pnew->next=pcur;
*head=pnew;
}else{
pcur=pcur->next;
while(pcur)//插中间
{
if(i < pcur->num )
{
pnew->next=pcur;
ppre->next=pnew;
break;
}
ppre=pcur;
pcur=pcur->next;
}
if(NULL==pcur)//插尾部
{
ppre->next=pnew;
*tail=pnew;
}
}
}
void print(pstu head)
{
while(head)
{
printf("%d ",head->num);
head=head->next;
}
printf("\n");
}
int main()
{
int i;
pstu head1,head2,tail1,tail2;
head1=head2=tail1=tail2=NULL;
printf("please input nums of 1st list\n");
while(scanf("%d",&i)!=EOF)
{
list_sort(&head1,&tail1,i);
}
printf("the 1st list is:\n");
print(head1);
printf("-------------------\n");
printf("please input nums of 2nd list\n");
while(scanf("%d",&i)!=EOF)
{
list_sort(&head2,&tail2,i);
}
printf("the 2nd list is:\n");
print(head2);
printf("-------------------\n");
while(head2)
{
list_sort(&head1,&tail1,head2->num);
head2=head2->next;
}
printf("the combination of two list is:\n");
print(head1);
system("pause");
}