/*假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个
按元素递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。*/
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList createHeadList(LinkList &L)
{
LNode *r;
L = (LinkList)malloc(sizeof(LNode));
r = L;
ElemType x;
scanf("%d",&x);
while(x != 9999)
{
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
}
r->next = NULL;
return L;
}
LinkList combinList(LinkList &A,LinkList &B)
{
LNode *pa = A->next;
A->next = NULL;
LNode *pb = B->next;
LNode *r;
while(pa && pb)
{
if(pa->data<pb->data)
{
r = pa->next;
pa->next = A->next;
A->next = pa;
pa = r;
}else{
r = pb->next;
pb->next = A->next;
A->next = pb;
pb = r;
}
}
if(pa)
pb = pa;
while(pb)
{
r = pb->next;
pb->next = A->next;
A->next = pb;
pb = r;
}
free(B);
return A;
}
bool printList(LinkList L)
{
LNode *p = L->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return true;
}
void main()
{
LinkList A,B;
printf("创建链表A:");
createHeadList(A);
printf("创建链表B:");
createHeadList(B);
printf("After:\n");
combinList(A,B);
printList(A);
}
10-31
709