mirror of
https://github.com/TheAlgorithms/C
synced 2024-11-22 13:31:21 +03:00
104 lines
2.7 KiB
C
104 lines
2.7 KiB
C
#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;
|
|
}
|