C++ Program For Comparing Two Strings Represented As Linked Lists
Last Updated :
15 Jun, 2022
Given two strings, represented as linked lists (every character is a node in a linked list). Write a function compare() that works similar to strcmp(), i.e., it returns 0 if both strings are the same, 1 if the first linked list is lexicographically greater, and -1 if the second string is lexicographically greater.
Examples:
Input: list1 = g->e->e->k->s->a
list2 = g->e->e->k->s->b
Output: -1
Input: list1 = g->e->e->k->s->a
list2 = g->e->e->k->s
Output: 1
Input: list1 = g->e->e->k->s
list2 = g->e->e->k->s
Output: 0
C++
#include<bits/stdc++.h>
using namespace std;
struct Node
{
char c;
struct Node *next;
};
Node* newNode( char c)
{
Node *temp = new Node;
temp->c = c;
temp->next = NULL;
return temp;
};
int compare(Node *list1,
Node *list2)
{
while (list1 && list2 &&
list1->c == list2->c)
{
list1 = list1->next;
list2 = list2->next;
}
if (list1 && list2)
return ((list1->c >
list2->c)? 1: -1);
if (list1 && !list2) return 1;
if (list2 && !list1) return -1;
return 0;
}
int main()
{
Node *list1 = newNode( 'g' );
list1->next = newNode( 'e' );
list1->next->next = newNode( 'e' );
list1->next->next->next =
newNode( 'k' );
list1->next->next->next->next =
newNode( 's' );
list1->next->next->next->next->next =
newNode( 'b' );
Node *list2 = newNode( 'g' );
list2->next = newNode( 'e' );
list2->next->next = newNode( 'e' );
list2->next->next->next =
newNode( 'k' );
list2->next->next->next->next =
newNode( 's' );
list2->next->next->next->next->next =
newNode( 'a' );
cout << compare(list1, list2);
return 0;
}
|
Output:
1
Time Complexity: O(M + N), where M and N represents the length of the given two linked lists.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Please refer complete article on Compare two strings represented as linked lists for more details!
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...