Open In App

Check if a linked list of strings forms a palindrome

Last Updated : 26 Dec, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a linked list handling string data, check to see whether data is palindrome or not? 

For example, 

Input  : a -> bc -> d -> dcb -> a -> NULL
Output : True
String "abcddcba" is palindrome.

Output : 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++
// Program to check if a given linked list of strings 
// form a palindrome 
#include <bits/stdc++.h> 
using namespace std; 

/* Link list node */
struct Node 
{ 
    string data; 
    Node* next; 
}; 

// A utility function to check if str is palindrome 
// or not 
bool isPalindromeUtil(string str) 
{ 
    int length = str.length(); 

    // Match characters from beginning and 
    // end. 
    for (int i=0; i<length/2; i++) 
        if (str[i] != str[length-i-1]) 
            return false; 

    return true; 
} 

// Returns true if string formed by linked 
// list is palindrome 
bool isPalindrome(Node *node) 
{ 
    // Append all nodes to form a string 
    string str = ""; 
    while (node != NULL) 
    { 
        str.append(node->data); 
        node = node->next; 
    } 

    // Check if the formed string is palindrome 
    return isPalindromeUtil(str); 
} 

// A utility function to print a given linked list 
void printList(Node *node) 
{ 
    while (node != NULL) 
    { 
        cout << node->data << " -> "; 
        node = node->next; 
    } 
    printf("NULL\n"); 
} 

/* Function to create a new node with given data */
Node *newNode(const char *str) 
{ 
    Node *new_node = new Node; 
    new_node->data = str; 
    new_node->next = NULL; 
    return new_node; 
} 

/* Driver program to test above function*/
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\n"): 
                        printf("false\n"); 

    return 0; 
} 
Java
// Java Program to check if a given linked list of strings
// form a palindrome

import java.util.Scanner;

// Linked List node
class Node
{
    String data;
    Node next;

    Node(String d)
    {
        data = d;
        next = null;
    }
}

class LinkedList_Palindrome
{
    Node head;

    // A utility function to check if str is palindrome
    // or not
    boolean isPalidromeUtil(String str)
    {
        int length = str.length();

        // Match characters from beginning and
        // end.
        for (int i=0; i<length/2; i++)
            if (str.charAt(i) != str.charAt(length-i-1))
                return false;

        return true;
    }

    // Returns true if string formed by linked
    // list is palindrome
    boolean isPalindrome()
    {
        Node node = head;

        // Append all nodes to form a string
        String str = "";
        while (node != null)
        {
            str = str.concat(node.data);
            node = node.next;
        }

        // Check if the formed string is palindrome
        return isPalidromeUtil(str);
    }

    /* Driver program to test above function*/
    public static void main(String[] args)
    {
        LinkedList_Palindrome list = new LinkedList_Palindrome();
        list.head = new Node("a");
        list.head.next = new Node("bc");
        list.head.next.next = new Node("d");
        list.head.next.next.next = new Node("dcb");
        list.head.next.next.next.next = new Node("a");

        System.out.println(list.isPalindrome());

    }
}
// This code has been contributed by Amit Khandelwal
Python3
# 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,end=" ")
            temp = temp.next


# Driver program to test above function
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)
C#
// C# Program to check if a given linked list 
// of strings form a palindrome 
using System;

// Linked List node 
class Node 
{ 
    public String data; 
    public Node next; 

    public Node(String d) 
    { 
        data = d; 
        next = null; 
    } 
} 

public class LinkedList_Palindrome 
{ 
    Node head; 

    // A utility function to check if 
    // str is palindrome or not 
    bool isPalidromeUtil(String str) 
    { 
        int length = str.Length; 

        // Match characters from beginning and 
        // end. 
        for (int i = 0; i < length / 2; i++) 
            if (str[i] != str[length - i - 1]) 
                return false; 

        return true; 
    } 

    // Returns true if string formed by linked 
    // list is palindrome 
    bool isPalindrome() 
    { 
        Node node = head; 

        // Append all nodes to form a string 
        String str = ""; 
        while (node != null) 
        { 
            str = str+(node.data); 
            node = node.next; 
        } 

        // Check if the formed string is palindrome 
        return isPalidromeUtil(str); 
    } 

    /* Driver code*/
    public static void Main(String[] args) 
    { 
        LinkedList_Palindrome list = new LinkedList_Palindrome(); 
        list.head = new Node("a"); 
        list.head.next = new Node("bc"); 
        list.head.next.next = new Node("d"); 
        list.head.next.next.next = new Node("dcb"); 
        list.head.next.next.next.next = new Node("a"); 

        Console.WriteLine(list.isPalindrome()); 
    } 
} 

// This code has been contributed
// by PrinciRaj1992 
JavaScript
<script>
// Javascript Program to check if a given linked list of strings 
// form a palindrome 
var head;

class Node{
    constructor(val){
        this.data = val;
        this.next = null;
    }
}

function isPalindromeUtil(str){
    var length = str.length;
    // Match characters from beginning and 
    // end.
    for(var i = 0; i<length/2; i++){
        if(str[i] != str[length-i-1])
            return false;
    }
    return true;
}

// Returns true if string formed by linked 
// list is palindrome 
function isPalindrome(node){
    // Append all nodes to form a string
    var str = "";
    while(node != null){
        str += node.data;
        node = node.next;
    }
    // Check if the formed string is palindrome
    return isPalindromeUtil(str);
}

function printList(node)
{
    while (node != null)
    {
        console.log(node.data + " ");
        node = node.next;
    }
}

head = new Node("a");
head.next = new Node("bc");
head.next.next = new Node("d");
head.next.next.next = new Node("dcb");
head.next.next.next.next = new Node("a");

isPalindrome(head) ? console.log("true") : console.log("false");

// This code is contributed by Yash Agarwal(yashagarwal2852002)
</script>

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.


Next Article
Article Tags :
Practice Tags :

Similar Reads