建立两个非递减有序单链表,然后合并成一个非递增有序的单链表。
注意:建立非递减有序的单链表
输入:
1 9 5 7 3 0
2 8 4 6 0
输出:
9 8 7 6 5 4 3 2 1
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkList
{
int data;
struct LinkList *next;
}LNode;
LNode *Head()
{
LNode *p=(LNode *)malloc(sizeof(LNode));
p->next=NULL;
return p;
}
//增加结点
void Add(LNode *L)
{
LNode *p=NULL;
while(1)
{
p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
if(p->data==0) break;
p->next=NULL;
L->next=p;
L=L->next;
}
}
//合并链表
void MergeList(LNode *A,LNode *B,LNode *C)
{
LNode *pa,*pb,*pc;
pa=A->next;
pb=B->next;
pc=C;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<=pb->data)
{
pc=pa->next;
pa->next=C->next;
C->next=pa;
pa=pc;
}
else
{
pc=pb->next;
pb->next=C->next;
C->next=pb;
pb=pc;
}
}
while(pa==NULL&&pb!=NULL)
{
pc=pb->next;
pb->next=C->next;
C->next=pb;
pb=pc;
}
while(pa!=NULL&&pb==NULL)
{
pc=pa->next;
pa->next=C->next;
C->next=pa;
pa=pc;
}
}
//输出结点
void PrintList(LNode *L)
{
L=L->next;
while(L!=NULL)
{
printf("%d ",L->data);
L=L->next;
}
}
int main()
{
LNode *L1,*L2,*L;
L1=Head();
L2=Head();
L=Head();
Add(L1);
Add(L2);
MergeList(L1,L2,L);
PrintList(L);
//printf("Hello world!\n");
return 0;
}