Challenge

Project 1 - Creation of user defined data type to implement the user interfaces for working with ‘Set’ (Mathematical Set theory)

Aim: To write c program for union and intersection of two lists using linked list

program

#include <stdio.h>
#include <stdlib.h>

/* A structure of linked list node */
struct node {
  int data;
  struct node *next;
} *LL1, *LL2, *unionLL, *intersectionLL;

void initialize(){
    LL1 = LL2 = NULL;
}
/*
Given a Inserts a node in front of a singly linked list.
*/
void insert(struct node **head, int num) {
    /* Create a new Linked List node */
    struct node* newNode = (struct node*) malloc(sizeof(struct node));
    newNode->data  = num;
    /* Next pointer of new node will point to head node of linked list  */
    newNode->next = *head;
    /* make new node as new head of linked list */
    *head = newNode;
}

/* Searches an element in Linked List by
linearly traversing from head to tail */
int search(struct node *head, int num) {
    while (head != NULL) {
        if (head->data == num){
            return 1;
        }
        head = head->next;
    }
    return 0;
}

/*
Returns the union of two given linked list
*/
struct node* findunion(struct node *LL1, struct node *LL2) {
    unionLL = NULL;
    /* Add all nodes of first Linked List to unionLL */
    struct node *temp = LL1;
    while(temp != NULL){
        insert(&unionLL, temp->data);
        temp = temp->next;
    }
    /* Insert those nodes of LLTwo which is not present in LLOne */
    while(LL2 != NULL){
        if(!search(LL1, LL2->data)){
            insert(&unionLL, LL2->data);
        }
        LL2 = LL2->next;
    }
    return unionLL;
}
/*
Returns the Linked List which contains common nodes of two given linked list
*/
struct node* intersection(struct node *LL1, struct node *LL2) {
    intersectionLL = NULL;
    /* Search every element of LLOne in LLTwo,
    If found then add it to intersection List */
    while(LL1 != NULL){
        if(search(LL2, LL1->data)){
            insert(&intersectionLL, LL1->data);
        }
        LL1 = LL1->next;
    }
    return intersectionLL;
}
/*
Prints a linked list from head node till tail node
*/
void printLinkedList(struct node *nodePtr) {
  while (nodePtr != NULL) {
     printf("%d", nodePtr->data);
     nodePtr = nodePtr->next;
     if(nodePtr != NULL)
         printf(" ");
  }
}

int main() {
    int i, LL1Count, LL2Count, temp;
    initialize();
    /* Creating First linked List*/
    printf("Enter number of nodes in first Linked List:\n");
    scanf("%d", &LL1Count);
    printf("Enter %d integers:\n", LL1Count);
    for(i=0; i<LL1Count; i++){
        scanf("%d", &temp);
        insert(&LL1, temp);
    }
    printLinkedList(LL1);
    printf("\nEnter number of nodes in second Linked List:\n");
    scanf("%d", &LL2Count);
    printf("Enter %d integers:\n", LL2Count);
    for(i=0; i<LL2Count; i++){
        scanf("%d", &temp);
        insert(&LL2, temp);
    }
    printLinkedList(LL2);
    /* printing Union of two given linked list */
    findunion(LL1, LL2);
    intersection(LL1, LL2);
    printf("\nUnion Linked List:\n");
    printLinkedList(unionLL);
    printf("\nIntersection Linked List:\n");
    printLinkedList(intersectionLL);

    return 0;
}

output

Result:

Thus the c program for union and intersection of two lists using linked list was written and exicuted successfully.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.