#include "stdio.h"
#include "malloc.h"
#define FALSE 0
#define TRUE 1
typedef int elemtype;
typedef struct LinkList {
elemtype data;
struct LinkList *next;
}LinkList;
LinkList *InitList(){
LinkList *head;
head = (LinkList *)malloc(sizeof(LinkList));
head ->next =NULL;
return head;
}
int ListInsert(LinkList *L,int x,int e)
{
int j = 0;
LinkList *p = L, *s;
while(p!=NULL && j<x-1)
{
p = p->next;
j++;
}
if(p==NULL)
{
return FALSE;
}
else
{
s = (LinkList *)malloc(sizeof(LinkList));
s->data = e;
s->next = p->next;
p->next = s;
return TRUE;
}
}
LinkList *jiaoji(LinkList *La,LinkList *Lb) {
LinkList *Lc,*pa,*pb,*pc,*qc;
Lc = pc = (LinkList *)malloc(sizeof(LinkList));
pc->data = 0;
pa = La->next;
pb = Lb;
while(pa != La) {
pb = Lb->next;
while(pb != Lb) {
if(pb->data == pa->data) {
qc = (LinkList *)malloc(sizeof(LinkList));
qc->data = pb->data;
pc->next = qc;
pc = qc;
}
pb = pb->next;
}
pa = pa->next;
}
pc->next = Lc;
return Lc;
}
void DispList(LinkList *L)
{
LinkList *p = L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkList *La,*Lb,*Lc;
int i=0,j=0,len1=0,len2=0;
elemtype e;
La = InitList();
printf("输入集合A中的元素数:");
scanf("%d",&len1);
printf("输入集合A中的数据元素(按回车添加下一个元素):\n");
for(i;i<len1;i++){
scanf("%d",&e);
ListInsert(La,i+1,e);
}
printf("链表1:");
DispList(La);
Lb = InitList();
printf("输入集合B中的元素数:");
scanf("%d",&len2);
printf("输入集合B中的数据元素(按回车添加下一个元素):\n");
for(j;j<len2;j++){
scanf("%d",&e);
ListInsert(Lb,j+1,e);
}
printf("链表2:");
DispList(Lb);
printf("两个集合的交集:");
Lc = InitList();
Lc = jiaoji(La,Lb);
DispList(Lc);
}