Check if a doubly linked list of characters is palindrome or not - GeeksforGeeks

21 May, 2021
Given a doubly-linked list of characters, write a function that returns true if the given doubly linked list is a palindrome, else false. 
Create a doubly linked list where each node contains only one character of a string.Initialize two pointers left at the start of the list and right at the end of the list.Check if the data on the left node is equal to the right node. If it is equal, then increment left and decrement right till the middle of the list. If, at any stage, it is not equal, then return false.
Create a doubly linked list where each node contains only one character of a string.
Initialize two pointers left at the start of the list and right at the end of the list.
Check if the data on the left node is equal to the right node. If it is equal, then increment left and decrement right till the middle of the list. If, at any stage, it is not equal, then return false.
C++
Java
Python3
C#
Javascript
// C++ program to check if doubly// linked list is palindrome or not#include<bits/stdc++.h>using namespace std; // Structure of nodestruct Node{    char data;    struct Node *next;    struct Node *prev;}; /* Given a reference (pointer to pointer) to   the head of a list and an int, inserts a   new node on the front of the list. */void push(struct Node** head_ref, char new_data){    struct Node* new_node = new Node;    new_node->data  = new_data;    new_node->next = (*head_ref);    new_node->prev = NULL;    if ((*head_ref) !=  NULL)      (*head_ref)->prev = new_node ;    (*head_ref)    = new_node;} // Function to check if list is palindrome or notbool isPalindrome(struct Node *left){    if (left == NULL)       return true;     // Find rightmost node    struct Node *right = left;    while (right->next != NULL)        right = right->next;     while (left != right)    {        if (left->data != right->data)            return false;         left = left->next;        right = right->prev;    }     return true;} // Driver programint main(){    struct Node* head = NULL;    push(&head, 'l');    push(&head, 'e');    push(&head, 'v');    push(&head, 'e');    push(&head, 'l');     if (isPalindrome(head))        printf("It is Palindrome");    else        printf("Not Palindrome");     return 0;}
// Java program to check if doubly// linked list is palindrome or notclass GFG{ // Structure of nodestatic class Node{    char data;    Node next;    Node prev;}; /* Given a reference (pointer to pointer) tothe head of a list and an int, inserts anew node on the front of the list. */static Node push(Node head_ref, char new_data){    Node new_node = new Node();    new_node.data = new_data;    new_node.next = head_ref;    new_node.prev = null;    if (head_ref != null)    head_ref.prev = new_node ;    head_ref = new_node;    return head_ref;} // Function to check if list is palindrome or notstatic boolean isPalindrome(Node left){    if (left == null)    return true;     // Find rightmost node    Node right = left;    while (right.next != null)        right = right.next;     while (left != right)    {        if (left.data != right.data)            return false;         left = left.next;        right = right.prev;    }     return true;} // Driver programpublic static void main(String[] args){    Node head = null;    head = push(head, 'l');    head = push(head, 'e');    head = push(head, 'v');    head = push(head, 'e');    head = push(head, 'l');     if (isPalindrome(head))        System.out.printf("It is Palindrome");    else        System.out.printf("Not Palindrome");}} // This code is contributed by Rajput-Ji
# Python3 program to check if doubly# linked list is a palindrome or not class Node:      def __init__(self, data, next, prev):        self.data = data        self.next = next        self.prev = prev # Given a reference (pointer to pointer) to# the head of a list and an int, inserts# a new node on the front of the list.def push(head_ref, new_data):      new_node = Node(new_data, head_ref, None)     if head_ref != None:        head_ref.prev = new_node        head_ref = new_node             return head_ref  # Function to check if list is palindrome or notdef isPalindrome(left):      if left == None:        return True     # Find rightmost node    right = left    while right.next != None:        right = right.next     while left != right:              if left.data != right.data:            return False         left = left.next        right = right.prev          return True  # Driver programif __name__ == "__main__":      head = None    head = push(head, 'l')    head = push(head, 'e')    head = push(head, 'v')    head = push(head, 'e')    head = push(head, 'l')     if isPalindrome(head):        print("It is Palindrome")    else:        print("Not Palindrome") # This code is contributed by Rituraj Jain
// C# program to check if doubly// linked list is palindrome or notusing System; class GFG{ // Structure of nodepublic class Node{    public char data;    public Node next;    public Node prev;}; /* Given a reference (pointer to pointer) tothe head of a list and an int, inserts anew node on the front of the list. */static Node push(Node head_ref, char new_data){    Node new_node = new Node();    new_node.data = new_data;    new_node.next = head_ref;    new_node.prev = null;    if (head_ref != null)    head_ref.prev = new_node ;    head_ref = new_node;    return head_ref;} // Function to check if list is palindrome or notstatic bool isPalindrome(Node left){    if (left == null)    return true;     // Find rightmost node    Node right = left;    while (right.next != null)        right = right.next;     while (left != right)    {        if (left.data != right.data)            return false;         left = left.next;        right = right.prev;    }     return true;} // Driver programpublic static void Main(String[] args){    Node head = null;    head = push(head, 'l');    head = push(head, 'e');    head = push(head, 'v');    head = push(head, 'e');    head = push(head, 'l');     if (isPalindrome(head))        Console.Write("It is Palindrome");    else        Console.Write("Not Palindrome");}} // This code is contributed by Rajput-Ji
<script>    // javascript program to check if doubly    // linked list is palindrome or not    // Structure of node    class Node {        constructor() {            this.data = 0;            this.prev = null;            this.next = null;        }    }     /*     * Given a reference (pointer to pointer) to the head of a list and an int,     * inserts a new node on the front of the list.     */    function push(head_ref,  new_data) {        var new_node = new Node();        new_node.data = new_data;        new_node.next = head_ref;        new_node.prev = null;        if (head_ref != null)            head_ref.prev = new_node;        head_ref = new_node;        return head_ref;    }     // Function to check if list is palindrome or not    function isPalindrome(left) {        if (left == null)            return true;         // Find rightmost node        var right = left;        while (right.next != null)            right = right.next;         while (left != right) {            if (left.data != right.data)                return false;             left = left.next;            right = right.prev;        }         return true;    }     // Driver program         var head = null;    head = push(head, 'l');    head = push(head, 'e');    head = push(head, 'v');    head = push(head, 'e');    head = push(head, 'l');     if (isPalindrome(head))        document.write("It is Palindrome");    else        document.write("Not Palindrome"); // This code contributed by umadevi9616</script>
Output: 
It is Palindrome
Time complexity: O(n) Auxiliary Space : O(1)
Related Post:  
Function to check if a singly linked list is a palindrome
Check if a linked list of strings forms a palindrome
This article is contributed by Akash Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
rituraj_jain
Rajput-Ji
umadevi9616
doubly linked list
palindrome
Linked List
Linked List
palindrome
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Delete a node in a Doubly Linked List
Given a linked list which is sorted, how will you insert in sorted way
Insert a node at a specific position in a linked list
Circular Linked List | Set 2 (Traversal)
Program to implement Singly Linked List in C++ using class
Swap nodes in a linked list without swapping data
Priority Queue using Linked List
Circular Singly Linked List | Insertion
Real-time application of Data Structures
Insertion Sort for Singly Linked List