Question: Write a program to check if 2 linked lists are identical?
Method 1(Iterative):-
To Determine if both Linked lists are identical, we need to traverse both lists simultaneously, and while traversing we need to compare data of each node.
Implementation
//returns 1 if both lists are identical or returns 0
int areIdenticalLinkedList(struct node * list1, struct node * list2)
{
while(1)
{
// return 1 if both are NULL
if(list1 == NULL && list2 == NULL)
return 1;
// return 0 if one of them is NULL
if(list1 == NULL || list2 == NULL)
return 0;
if(list1 -> data != list2 -> data)
return 0;
list1 = list1 -> next;
list2 = list2 -> next;
}
}
Method2( Recursive):-
//returns 1 if both lists are identical or returns 0
int areIdenticalLinkedListRecursive(struct node * list1, struct node * list2)
{
// return 1 if both are same
if (list1 == NULL && list2 == NULL)
return 1;
// return 0 if one of them is different
if (list1 == NULL || list2 == NULL)
return 0;
if (list1 -> data != list2 -> data)
return 0;
// the recursive call
return areIdenticalLinkedListRecursive(list1 -> next, list2 -> next);
}
It may seem that both recursive and iterative implementation are the same but the iterative version is recommended since it offers better control and the recursive implementation maintains a stack of all the callbacks.
