题目
设计将两个有序的单链表合成一个单链表并保持有序的算法
代码
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//尾插法创建单链表
void createLinkList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
LNode *p,*r=L;
ElemType e;
cin>>e;
while(e!=999){
p=(LNode *)malloc(sizeof(LNode));
p->data=e;
r->next=p;
r=p;
cin>>e;
}
r->next=NULL; //尾结点指针置空
}
//遍历链表
void dispLinkList(LinkList L){
LNode *p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
/**
* 算法主体
**/
void mergeAandB(LinkList &LC,LinkList LA,LinkList LB){
LC=(LNode *)malloc(sizeof(LNode));
LC->next=NULL;
LNode *p,*r=LC; //尾插法构建LC链表
LNode *pa=LA->next,*pb=LB->next;
while(pa!=NULL&&pb!=NULL){
if(pa->data<=pb->data){
p=(LNode *)malloc(sizeof(LNode));
p->data=pa->data;
r->next=p;
r=p;
pa=pa->next;
}
if(pa->data>pb->data){
p=(LNode *)malloc(sizeof(LNode));
p->data=pb->data;
r->next=p;
r=p;
pb=pb->next;
}
}
if(pa!=NULL){
r->next=pa;
}
if(pb!=NULL){
r->next=pb;
}
}
int main() {
LinkList LA,LB,LC;
createLinkList(LA);
createLinkList(LB);
dispLinkList(LA);
dispLinkList(LB);
mergeAandB(LC,LA,LB);
dispLinkList(LC);
return 0;
}