实现算法
void MergeList(LinkList &LA,LinkList LB){
m=ListLength(LA);
n=ListLength(LB);
for(i=1;i<=n;i++){
GetElem(LB,i,e);
if(!LocateElem(LA,e)){
ListInsert(LA,++m,e);
}
}
}
具体实现代码
#include<stdio.h>
#include<stdlib.h>
//定义单链表
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//单链表初始化(带头节点)
void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
}
//求单链表表长
int ListLength(LinkList L){
LNode *p=L;
int n=0;
if(p->next==NULL){//如果单链表为空
return n;
}
while(p->next!=NULL){
n=n+1;
p=p->next;
}
return n;
}
//取单链表第i个元素给e
bool GetElem(LinkList L,int i,int &e){
LNode *p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
++j;
}
if(!p||j>i){
return false;
}
e=p->data;
return true;
}
//单链表的按值查找
LNode *LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p&&p->data!=e){
p=p->next;
}
return p;
}
//在单链表后插入一个元素
void ListInsert(LinkList &L,int i,int e){
LNode *s,*p=L;
int j=0;
while(p&&(j<i-1)){
p=p->next;
++j;
}
if(!p || j>i-1){
return;
}
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
//尾插法创建单链表
int CreateList_R(LinkList &L){
InitList(L);
LNode *s,*r=L;
int x;
printf("依次输入单链表中的元素,中间用空格隔开,9999为停止创建:");
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return 0;
}
//算法
void MergeList(LinkList &LA,LinkList LB){
int m,n,e;
m=ListLength(LA);
n=ListLength(LB);
for(int i=1;i<=n;i++){
GetElem(LB,i,e);
if(!LocateElem(LA,e)){
ListInsert(LA,++m,e);
}
}
}
//输出单链表中的元素
void printList(LinkList L){
LNode *p=L;
p=p->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main(){
LNode *LA,*LB;
printf("创建单链表LA:\n");
CreateList_R(LA);
printf("输出单链表LA:");
printList(LA);
printf("创建单链表LB:\n");
CreateList_R(LB);
printf("输出单链表LB:");
printList(LB);
MergeList(LA,LB);//将单链表LB中的数字合并到LA中
printf("输出合并后的单链表:");
printList(LA);
return 0;
}