Palindrome linked list

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def isPalindrome(self, head: Optional[ListNode]) -> bool:
        self.left = head

        def traverse(right):
            if not right:
                return True
            res = traverse(right.next)
            # print(right.val, )
            res = res and (right.val == self.left.val)
            self.left = self.left.next

            return res

        return traverse(head)

Palindrome Linked List

Difficulty: Easy


Given the head of a singly linked list, return true if it is a palindrome or false otherwise.

 

Example 1:

Input: head = [1,2,2,1]
Output: true

Example 2:

Input: head = [1,2]
Output: false

 

Constraints:

  • The number of nodes in the list is in the range [1, 105].
  • 0 <= Node.val <= 9

 

Follow up: Could you do it in O(n) time and O(1) space?