//合并两个递增有序的链表
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//初始化单链表
void InitList(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
}
//尾结点创建单链表
void createTailList(LinkList &L)
{
ElemType x;
LNode *p;
LNode *r=L;
scanf("%d",&x);
while(x!=9999)
{
p = (LNode*)malloc(sizeof(LNode));
p->data = x;
r->next = p;
r = p;
scanf("%d",&x);
}
r->next = NULL;
}
void combineList(LinkList &A,LinkList B)
{
LNode *pa = A->next;
LNode *pb = B->next;
LNode *r;
A->next = NULL;
r=A;
while(pa!=NULL && pb!=NULL)
{
if(pa->data<pb->data)
{
r->next = pa;
r = r->next;
pa = pa->next;
}else{
r->next = pb;
r = r->next;
pb = pb->next;
}
}
if(pa!=NULL)
pb = pa;
while(pb!=NULL)
{
r->next = pb;
r = r->next;
pb = pb->next;
}
r->next = NULL;
}
//打印单链表
void printList(LinkList &L)
{
LNode *p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
void main()
{
LinkList LA,LB;
InitList(LA);
InitList(LB);
createTailList(LA);
createTailList(LB);
printf("A:");
printList(LA);
printf("B:");
printList(LB);
printf("A combine with B:");
combineList(LA,LB);
printList(LA);
}