您的位置:首页 > Web前端

已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。

2017-07-26 14:35 441 查看
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。

#include<iostream>
using namespace std;

struct Node
{
int elem;//元素
Node* next;//下一个节点
};

void JudDiff(Node** la, Node* lb)//la是指向指针的指针,lb是指针
{
Node* prev = NULL;
Node* pa = *la;
Node* pb = lb;
Node* q = NULL;
while (pa)//当第一个链表不为NULL,循环继续
{
pb = lb;
while (pb && pa->elem != pb->elem)//pb不为NULL且pa不等于pb
{
pb = pb->next;
}//循环结束有两种情况,1,pb为NULL,没有找到与A相等的。2,找到与A相等的  且pb不为NULL
if (pb)
{
if (!prev)//prev存的是非公有数据
{
*la = pa->next;//当prev中没有数据时,la指向下一个元素
}
else
{
prev->next = pa->next;//当prev中有数据时,la的指向不变
}
q = pa;
pa = pa->next;
delete q;//删除pa中与b相同的元素
q = NULL;
}
else
{
prev = pa;//pa是差集中的一个元素
pa = pa->next;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++
相关文章推荐