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++
// C++ program to compare two strings // represented as linked lists #include<bits/stdc++.h> using namespace std; // Linked list Node // structure struct Node { char c; struct Node *next; }; // Function to create newNode // in a linkedlist Node* newNode( char c) { Node *temp = new Node; temp->c = c; temp->next = NULL; return temp; }; int compare(Node *list1, Node *list2) { // Traverse both lists. Stop when // either end of a linked list is // reached or current characters // don't match while (list1 && list2 && list1->c == list2->c) { list1 = list1->next; list2 = list2->next; } // If both lists are not empty, // compare mismatching characters if (list1 && list2) return ((list1->c > list2->c)? 1: -1); // If either of the two lists has // reached end if (list1 && !list2) return 1; if (list2 && !list1) return -1; // If none of the above conditions // is true, both lists have reached // end return 0; } // Driver code 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!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!