已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。
void difference(node** LA, node* LB)
{
node* pa = *LA;
node* pb = LB;
node* pre = NULL;
node* temp = NULL;
while (pa)
{
pb = LB;//保证每次从LB的第一个节点找起
while (pb&&pb->elem != pa->elem)//寻找PB中和PA相同的元素
pb = pb->next;
if (pb)//找到了
{
if (NULL == pre)//PA是头结点
*LA = pa->next;
else
{
pre->next = pa->next;//连接前后节点
}
temp = pa;
pa = pa->next;
free(temp);
}
else//没找到PA中的当前节点,继续寻找PA的下一个节点
{
pre = pa;
pa = pa->next;
}
}
}
转载:https://blog.csdn.net/sinat_36101354/article/details/76696358