通过第三个链表来保存交集的值。最终的是指针的理解和运用。
#include<iostream>
using namespace std;
//创建结构体
typedef struct PNode{
int val; //指数
struct PNode *next; //指针域
}PNode,*lb;
//创建链表及链表内容递增排序
void CreateList(lb &P,int n){
lb s,pre,q;
P=new PNode;
P->next=NULL;
for(int i=1;i<=n;++i)
{
s=new PNode;
cin>>s->val;
pre=P;
q=P->next;
while(q&&q->val<s->val){
pre=q;
q=q->next;
}
s->next=q;
pre->next=s;
}
}
//输出每个链表内容
void declare(lb L){
PNode *p;
p=L->next;
cout<<":";
while(p){ //循环输出链表
cout<<p->val<<" ";
p=p->next;
}
}
//求公共交集部分
void publiclist(lb &LA,lb &LB,lb &LC) //链表A和链表B,链表C保存交集再赋值给链表A
{
PNode *pa;PNode *pb;PNode *pc;PNode *p; //定义四个指针
pa=LA->next; //把链表A的初值赋给指针pa
pb=LB->next; //把链表B的初值赋给指针pa
LC=LA; //把链表A赋给链表C
pc=LC; //链表C的初值赋给指针pc
while(pa&&pb) //pa和pb不能为空
{
if(pa->val==pb->val)
{
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
else if (pa->val<pb->val)
pa=pa->next;
else
pb=pb->next;
}
pc->next=NULL;
LA=LC;
delete LB;
}
int main()
{
lb LA;lb LB;lb LC;int n; //定义结构指针变量A,B,C(变量C是保存公共部分)
cout<<"请输入创建的A集合元素的个数:"<<endl;
cin>>n; //输入链表A包含的个数
cout<<"请依次存入的数据:"<<endl;
CreateList (LA,n); //输出链表B的内容
cout<<"请输入创建的B集合元素的个数:"<<endl;
cin>>n; //输入链表B包含的个数
cout<<"请依次存入的数据:"<<endl;
CreateList (LB,n); //输出链表B的内容
cout<<"集合A为:";
declare(LA); //输出链表A
cout<<"集合B为:";
declare(LB); //输出链表B
publiclist(LA,LB,LC); //公共部分交集
cout<<"二者的交集为:";
declare(LA);
return 0;
}