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

来源:互联网 发布:平板电脑js加载错误 编辑:程序博客网 时间:2024/06/05 22:59

已知集合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;        }    }}
阅读全文
1 0
原创粉丝点击