In computer science, merge sort (also normally spelled mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. A detailed description and analysis of bottom-up mergesort looked in a report by Goldstine and von Neumann as early as 1948.

Repeatedly merge sublists to produce new sorted sublists until there is only one sublist remaining. divide the unsorted list into N sublists, each containing one component (a list of one component is considered sorted).

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