121 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
struct node {
 | 
						|
    int data;
 | 
						|
    struct node *prev;
 | 
						|
    struct node *next;
 | 
						|
};
 | 
						|
 | 
						|
typedef struct node *NODE;
 | 
						|
 | 
						|
NODE getnode() {
 | 
						|
    NODE x;
 | 
						|
    x = (NODE)malloc(sizeof(struct node));
 | 
						|
    if (x == NULL) {
 | 
						|
        printf("Out of memory\n");
 | 
						|
        exit(0);
 | 
						|
    }
 | 
						|
    return x;
 | 
						|
}
 | 
						|
 | 
						|
void insert_rear(NODE *head, int item) {
 | 
						|
    NODE temp, cur;
 | 
						|
    temp = getnode();
 | 
						|
    temp->data = item;
 | 
						|
    temp->next = NULL;
 | 
						|
    if (*head == NULL) {
 | 
						|
        temp->prev = NULL;
 | 
						|
        *head = temp;
 | 
						|
        return;
 | 
						|
    }
 | 
						|
    cur = *head;
 | 
						|
    while (cur->next != NULL)
 | 
						|
        cur = cur->next;
 | 
						|
    cur->next = temp;
 | 
						|
    temp->prev = cur;
 | 
						|
}
 | 
						|
 | 
						|
NODE union_lists(NODE head1, NODE head2) {
 | 
						|
    NODE result = NULL;
 | 
						|
    NODE temp = head1;
 | 
						|
    while (temp != NULL) {
 | 
						|
        insert_rear(&result, temp->data);
 | 
						|
        temp = temp->next;
 | 
						|
    }
 | 
						|
    temp = head2;
 | 
						|
    while (temp != NULL) {
 | 
						|
        NODE cur = result;
 | 
						|
        int found = 0;
 | 
						|
        while (cur != NULL) {
 | 
						|
            if (cur->data == temp->data) {
 | 
						|
                found = 1;
 | 
						|
                break;
 | 
						|
            }
 | 
						|
            cur = cur->next;
 | 
						|
        }
 | 
						|
        if (!found)
 | 
						|
            insert_rear(&result, temp->data);
 | 
						|
        temp = temp->next;
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
}
 | 
						|
 | 
						|
NODE intersection_lists(NODE head1, NODE head2) {
 | 
						|
    NODE result = NULL;
 | 
						|
    NODE temp = head1;
 | 
						|
    while (temp != NULL) {
 | 
						|
        NODE cur = head2;
 | 
						|
        while (cur != NULL) {
 | 
						|
            if (temp->data == cur->data) {
 | 
						|
                insert_rear(&result, temp->data);
 | 
						|
                break;
 | 
						|
            }
 | 
						|
            cur = cur->next;
 | 
						|
        }
 | 
						|
        temp = temp->next;
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
}
 | 
						|
 | 
						|
void display(NODE head) {
 | 
						|
    NODE temp = head;
 | 
						|
    while (temp != NULL) {
 | 
						|
        printf("%d ", temp->data);
 | 
						|
        temp = temp->next;
 | 
						|
    }
 | 
						|
    printf("\n");
 | 
						|
}
 | 
						|
 | 
						|
int main() {
 | 
						|
    NODE list1 = NULL;
 | 
						|
    NODE list2 = NULL;
 | 
						|
 | 
						|
    // Inserting elements into list1
 | 
						|
    insert_rear(&list1, 1);
 | 
						|
    insert_rear(&list1, 2);
 | 
						|
    insert_rear(&list1, 3);
 | 
						|
 | 
						|
    // Inserting elements into list2
 | 
						|
    insert_rear(&list2, 3);
 | 
						|
    insert_rear(&list2, 4);
 | 
						|
    insert_rear(&list2, 5);
 | 
						|
 | 
						|
    // Displaying the lists
 | 
						|
    printf("List 1: ");
 | 
						|
    display(list1);
 | 
						|
    printf("List 2: ");
 | 
						|
    display(list2);
 | 
						|
 | 
						|
    // Union of the lists
 | 
						|
    NODE union_result = union_lists(list1, list2);
 | 
						|
    printf("Union: ");
 | 
						|
    display(union_result);
 | 
						|
 | 
						|
    // Intersection of the lists
 | 
						|
    NODE intersection_result = intersection_lists(list1, list2);
 | 
						|
    printf("Intersection: ");
 | 
						|
    display(intersection_result);
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 |