class Solution: def isPalindrome(self, head: Optional[ListNode]) -> bool: n = 0 def reverse(node): prev = None while node: n = node.next node.next = prev prev, node = node, n return prev # find length of list cur = head while cur: n += 1 cur = cur.next # move to center of list and reverse second half cur = head for _ in range(n // 2): cur = cur.next reversed_head = reverse(cur) for _ in range(n // 2): if head.val != reversed_head.val: return False head = head.next reversed_head = reversed_head.next return True