Check if a linked list of strings forms a palindrome - GeeksforGeeks

09 Mar, 2022
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++
Java
Python3
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 notbool 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 palindromebool 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 listvoid 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 Program to check if a given linked list of strings// form a palindrome import java.util.Scanner; // Linked List nodeclass 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
# Python program to check if given linked list of# strings form a palindrome # Node classclass 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 functionllist = 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# Program to check if a given linked list// of strings form a palindromeusing System; // Linked List nodeclass 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
Output: 
true
 
YouTubeGeeksforGeeks506K subscribersCheck if a linked list of strings forms a palindrome | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 6:21•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=Ga9iLtMKhKo" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Aditya Goel. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
princiraj1992
amartyaniel20
palindrome
Linked List
Linked List
palindrome
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Circular Linked List | Set 2 (Traversal)
Swap nodes in a linked list without swapping data
Circular Singly Linked List | Insertion
Given a linked list which is sorted, how will you insert in sorted way
Program to implement Singly Linked List in C++ using class
Delete a node in a Doubly Linked List
Real-time application of Data Structures
Insert a node at a specific position in a linked list
Linked List Implementation in C#
Priority Queue using Linked List