The following code checks if the given singly linked list is a palindrome using recursion. Time Complexity: O(n) Space Complexity: O(n)
C++ Program
bool isPalindrome() const
{
Node* node = isPalindrome(head, head);
if(node)
return true;
return false;
}
Node* isPalindrome(Node *left, Node *right) const
{
if(right == NULL)
{
return left;
}
left = isPalindrome(left, right->link);
if(left)
{
bool palindrome = left->ch == right->ch ? true : false;
if(palindrome)
{
left = left->link ? left->link : left;
return left;
}
}
return NULL;
}
Java Program
public boolean isPalindrome()
{
Node node = isPalindrome(head, head);
if(node == null)
return false;
return true;
}
private Node isPalindrome(Node left, Node right)
{
if(right == null)
{
return left;
}
left = isPalindrome(left, right.link);
if(left != null)
{
boolean palindrome = left.data == right.data ? true : false;
if(palindrome)
{
left = (left.link != null) ? left.link : left;
return left;
}
}
return null;
}
2 comments :
an explanation would have been nice
Its beautiful
Post a Comment