Program to check linked list items are forming palindrome or not in Python


Suppose we have a linked list. We have to check whether the list elements are forming a palindrome or not. So if the list element is like [5,4,3,4,5], then this is a palindrome, but a list like [5,4,3,2,1] is not a palindrome.

To solve this, we will follow these steps −

  • fast := head, slow := head, rev := None and flag := 1
  • if head is empty, then return true
  • while fast and next of fast is available
    • if next of the next of fast is available, then set flag := 0 and break the loop
    • fast := next of the next of fast
    • temp := slow, slow := next of slow
    • next of temp := rev, and rev := temp
  • fast := next of slow, and next of slow := rev
  • if flag is set, then slow := next of slow
  • while fast and slow are not None,
    • if value of fast is not same as value of slow, then return false
    • fast := next of fast, and slow := next of slow
  • return true

Let us see the following implementation to get better understanding −

Example

 Live Demo

class ListNode:
   def __init__(self, data, next = None):
      self.data = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
class Solution(object):
   def isPalindrome(self, head):
      fast,slow = head,head
      rev = None
      flag = 1
      if not head:
         return True
      while fast and fast.next:
         if not fast.next.next:
            flag = 0
            break
      fast = fast.next.next
      temp = slow
      slow = slow.next
      temp.next = rev
      rev = temp
      fast = slow.next
      slow.next = rev
      if flag:
         slow = slow.next
         while fast and slow:
            if fast.data != slow.data:
               return False
      fast = fast.next
      slow = slow.next
      return True
      head = make_list([5,4,3,4,5])
ob1 = Solution()
print(ob1.isPalindrome(head))

Input

[5,4,3,4,5]

Output

True

Updated on: 20-Oct-2020

84 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements