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.
Python
# Python program to check if given linked list # of strings form a palindrome # Node class class Node:
# Constructor to initialize the
# node object
def __init__( self , data):
self .data = data
self . next = None
class LinkedList:
# Function to initialize head
def __init__( self ):
self .head = None
# A utility function to check if str
# is palindrome or not
def isPalindromeUtil( self , string):
return (string = = string[:: - 1 ])
# Returns true if string formed by
# linked list is palindrome
def isPalindrome( self ):
node = self .head
# Append all nodes to form a string
temp = []
while (node is not None ):
temp.append(node.data)
node = node. next
string = "".join(temp)
return self .isPalindromeUtil(string)
# Utility function to print the
# linked LinkedList
def printList( self ):
temp = self .head
while (temp):
print temp.data,
temp = temp. next
# Driver code llist = LinkedList()
llist.head = Node( 'a' )
llist.head. next = Node( 'bc' )
llist.head. next . next = Node( "d" )
llist.head. next . next . next = Node( "dcb" )
llist.head. next . next . next . next = Node( "a" )
print "true" if llist.isPalindrome() else "false"
# This code is contributed by Nikhil Kumar Singh(nickzuck_007) |
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!