概述
使用链表来实现两组数据的合并(求并集)。主要思想就是在两个链表建立后(分别是1号链表和2号链表),先把其中一个(比如1号链表)复制给一个新链表(称之为3号链表),在对2号链表进行遍历,并把符合要求的数据继续插入3号链表。直至2号链表遍历结束,即完成。
以下是代码:
#include<bits/stdc++.h>
using namespace std;
struct ListNode
{
int date;
ListNode *next;
};
class List
{
ListNode *head;
public:
List(){head=new ListNode;head->next=NULL;}
void buildList();
List hebing(List A,List B);
void DisPlay();
};
void List::buildList()
{
ListNode *s,*r;
r=head;
while(1)
{
int a;
cin>>a;
if(a!=0)
{
s=new ListNode;
s->date=a;
r->next=s;
r=s;
}
else break;
}
r->next=NULL;
}
List List::hebing(List A,List B)
{
List C;
ListNode *p1=A.head->next;
ListNode *p2=B.head->next;
ListNode *s,*r;
r=C.head;
while(p1!=NULL)
{
s=new ListNode;
s->date=p1->date;
r->next=s;
r=s;
p1=p1->next;
}
r->next=NULL;
while(p2!=NULL)
{
int judge=0;
ListNode *p3=A.head->next;
while(p3!=NULL)
{
if(p3->date==p2->date)
{
judge=1;
p2=p2->next;
break;
}
else p3=p3->next;
}
if(judge==0)
{
s=new ListNode;
s->date=p2->date;
r->next=s;
r=s;
p2=p2->next;
}
}
r->next=NULL;
return C;
}
void List::DisPlay()
{
ListNode *p=head->next;
while(p!=NULL)
{
cout<<p->date<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
List A,B,C;
A.buildList();
B.buildList();
C=C.hebing(A,B);
C.DisPlay();
return 0;
}
需要注意的问题:
对2号链表遍历时,内层循环为遍历已经被复制到3号链表的1号链表。此时应针对1号链表的每个元素遍历2号链表,如果出现相同直接break;如果全部不相同(设置一个judge值进行判断),则把对应的2号链表这个数插入3号链表中。因此每次的内层循环应从头开始,记得初始化指针。
最后
以上就是忧心篮球为你收集整理的线性表链表实现数据并集的全部内容,希望文章能够帮你解决线性表链表实现数据并集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复