C Program To Check If A Linked List Of Strings Forms A Palindrome
Last Updated :
22 Jun, 2022
Given a linked list handling string data, check to see whether data is palindrome or not? Examples:
Input: a -> bc -> d -> dcb -> a -> NULL
Output: True
String "abcddcba" is palindrome.
Input: a -> bc -> d -> ba -> NULL
Output: False
String "abcdba" is not palindrome.
The idea is very simple. Construct a string out of given linked list and check if the constructed string is palindrome or not.
C++
#include <bits/stdc++.h>
using namespace std;
struct Node
{
string data;
Node* next;
};
bool isPalindromeUtil(string str)
{
int length = str.length();
for ( int i = 0; i < length / 2; i++)
if (str[i] != str[length - i - 1])
return false ;
return true ;
}
bool isPalindrome(Node *node)
{
string str = "" ;
while (node != NULL)
{
str.append(node->data);
node = node->next;
}
return isPalindromeUtil(str);
}
void printList(Node *node)
{
while (node != NULL)
{
cout << node->data << " -> " ;
node = node->next;
}
printf ( "NULL" );
}
Node *newNode( const char *str)
{
Node *new_node = new Node;
new_node->data = str;
new_node->next = NULL;
return new_node;
}
int main()
{
Node *head = newNode( "a" );
head->next = newNode( "bc" );
head->next->next = newNode( "d" );
head->next->next->next =
newNode( "dcb" );
head->next->next->next->next =
newNode( "a" );
isPalindrome(head)? printf ( "true" ):
printf ( "false" );
return 0;
}
|
Output:
true
Time Complexity: O(n), where n is the number of nodes in the given linked list.
Auxiliary Space: O(m), where m is the length of the string formed by the linked list.
Please refer complete article on Check if a linked list of strings forms a palindrome for more details!
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...