#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node *head1 = NULL;
struct node *head2 = NULL;
///// MAIN ALGORITHMIC FUNCTION to MERGE the two input linked lists ///////
void merge()
{
struct node *temp1 = head1;
struct node *temp2 = head2;
struct node *holder1 = NULL;
struct node *holder2 = NULL;
// Temporary pointer variables to store the address of next node of the two
// input linked list
while (temp1 != NULL && temp2 != NULL)
{
holder1 = temp1->next;
// Storing the address of next node of first linked list
temp1->next = temp2;
// Making the first node of first linked list point to first node of
// second linked list
if (holder1 != NULL)
{
// Making the first node of second linked list point to second node
// of first linked list
holder2 = temp2->next;
temp2->next = holder1;
}
temp1 = holder1;
temp2 = holder2;
// Updating the address location of two pointer variables temp1 and
// temp2
}
}
void printlist(struct node *temp)
{
printf("%d", temp->data);
temp = temp->next;
while (temp != NULL)
{
printf("->%d", temp->data);
temp = temp->next;
}
printf("\n");
}
int main()
{
// Linked List 1: 1->3->5->7 : Linked List 2: 2->4->6
// making lists
struct node *one = (struct node *)malloc(sizeof(struct node));
struct node *two = (struct node *)malloc(sizeof(struct node));
struct node *three = (struct node *)malloc(sizeof(struct node));
struct node *four = (struct node *)malloc(sizeof(struct node));
struct node *five = (struct node *)malloc(sizeof(struct node));
struct node *six = (struct node *)malloc(sizeof(struct node));
struct node *seven = (struct node *)malloc(sizeof(struct node));
// Seven nodes are created
head1 = one;
head2 = two;
// head1 points to first node of first linked list
// head2 points to first node of second linked list
one->data = 1;
one->next = three;
two->data = 2;
two->next = four;
three->data = 3;
three->next = five;
four->data = 4;
four->next = six;
five->data = 5;
five->next = seven;
six->data = 6;
six->next = NULL;
// Last node of second input linked list
seven->data = 7;
seven->next = NULL;
// Last node of first input linked list
printf("Linked List 1: ");
printlist(head1);
printf("\nLinked List 2: ");
printlist(head2);
// Merging the two linked list into single linked list
merge();
printf("\nMerged Linked List: ");
printlist(head1); // list one has been modified
return 0;
}
Β© Alger 2022