1、#include#includetypedef int Datatype;/定义链表的节点typedef struct LNodeDatatype data;LNode *next;LNode,*LinkList;bool InitLink(LinkList if(L=NULL)return false;L-next=NULL;return true;bool InsertData(LinkList while(pa-next!=NULL)pa=pa-next;LinkList p=(LinkList)malloc(sizeof(LNode);/新建数据节点if(p=NULL)printf(“
2、插入数据失败n“);return false;p-data=data;p-next=NULL;if(pa=NULL)pa=p;elsepa-next=p;return true;void createLink(LinkList Datatype data;scanf(“%d“,while(data!=00)InsertData(L,data);scanf(“%d“,void printLink(LinkList L)/打印链表LinkList p=L-next;while(p!=NULL)printf(“%d “,p-data);p=p-next;printf(“n“);bool merger
3、(LinkList La,LinkList Lb,LinkList pb=Lb-next; /用于循环pa=La-next;while(pa!=NULL) /以 La 为基础链,若 B 中的数据在 A 链中不存在,则插入到 Lc 中InsertData(Lc,pa-data);pa=pa-next; /pos 表示 la 链中最后一个数据节点,用于插入数据 bool flag=false; while(pb!=NULL) pa=La-next;flag=false; /用于判断 B 中的数据是否在 A 中存在while(pa!=NULL)if(pa-data=pb-data)flag=fals
4、e;break; /如果存在,则本次循环结束elseflag=true;pa=pa-next; /pa 向后移动if(flag)/* LinkList p=(LinkList)malloc(sizeof(LNode); /注释的代码是用于将 A 和 B 合并之后存放在 A 中 if(p=NULL)printf(“插入数据失败n“);return false;p-data=pb-data;p-next=NULL;pos-next=p;pos=p;*/InsertData(Lc,pb-data); /将 B 中的数据插入到 Lc 中pb=pb-next;return true;bool Inter
5、section(LinkList La,LinkList Lb,LinkList pb=Lb-next;while(pb!=NULL)pa=La-next;while(pa!=NULL)if(pa-data=pb-data) /求交集时,只需找到两个链中共同的数据,插入到 Lc 中即可InsertData(Lc,pa-data);pa=pa-next;pb=pb-next;return true;int main()LinkList La,Lb,Lc;if(!InitLink(La)printf(“初始化链表失败“);exit(1);if(!InitLink(Lb)printf(“初始化链表失
6、败“);exit(1);if(!InitLink(Lc)printf(“初始化链表失败“);exit(1);printf(“创建第一条链表n“);createLink(La);printf(“创建第二条链表n“);createLink(Lb);printf(“链表中的数据为n“);printf(“La: “);printLink(La);printf(“Lb: “);printLink(Lb);printf(“链表求并集n“);merger(La,Lb,Lc);printf(“合并之后链表中的数据为n“);printLink(Lc);printf(“链表求交集n“);if(!InitLink(Lc)printf(“初始化链表失败“);exit(1);Intersection(La,Lb,Lc);printf(“求交之后链表中的数据为n“);printLink(Lc);return(0);