#include #include 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; }