如何用c语言单链表实现求集合的并集交集差集并判断两个集合是否相等

这是数据结构上的一道题,求求大佬们帮帮忙,真的不会😭

望采纳,谢谢

可以使用以下代码来实现:
#include <stdio.h>
#include <stdlib.h>
//定义链表结构体
typedef struct node
{
    int data;
    struct node *next;
}Node;
//求两个集合的并集
Node *unionSet(Node *head1, Node *head2)
{
    Node *head = NULL;
    Node *p = head1;
    while (p != NULL)
    {
        Node *q = (Node *)malloc(sizeof(Node));
        q->data = p->data;
        q->next = head;
        head = q;
        p = p->next;
    }
    p = head2;
    while (p != NULL)
    {
        int flag = 0;
        Node *q = head;
        while (q != NULL)
        {
            if (q->data == p->data)
            {
                flag = 1;
                break;
            }
            q = q->next;
        }
        if (flag == 0)
        {
            Node *q = (Node *)malloc(sizeof(Node));
            q->data = p->data;
            q->next = head;
            head = q;
        }
        p = p->next;
    }
    return head;
}
//求两个集合的交集
Node *intersectionSet(Node *head1, Node *head2)
{
    Node *head = NULL;
    Node *p = head1;
    while (p != NULL)
    {
        int flag = 0;
        Node *q = head2;
        while (q != NULL)
        {
            if (q->data == p->data)
            {
                flag = 1;
                break;
            }
            q = q->next;
        }
        if (flag == 1)
        {
            Node *q = (Node *)malloc(sizeof(Node));
            q->data = p->data;
            q->next = head;
            head = q;
        }
        p = p->next;
    }
    return head;
}
//求两个集合的差集
Node *differenceSet(Node *head1, Node *head2)
{
    Node *head = NULL;
    Node *p = head1;
    while (p != NULL)
    {
        int flag = 0;
        Node *q = head2;
        while (q != NULL)
        {
            if (q->data == p->data)
            {
                flag = 1;
                break;
            }
            q = q->next;
        }
        if (flag == 0)
        {
            Node *q = (Node *)malloc(sizeof(Node));
            q->data = p->data;
            q->next = head;
            head = q;
        }
        p = p->next;
    }
    return head;
}
//判断两个集合是否相等
int isEqual(Node *head1, Node *head2)
{
    Node *p = head1;
    Node *q = head2;
    while (p != NULL && q != NULL)
    {
        if (p->data != q->data)
        {
            return 0;
        }
        p = p->next;
        q = q->next;
    }
    if (p == NULL && q == NULL)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

Regenerate response