234. Palindrome Linked List
Problem¶
Given the head
of a singly linked list, return true
if it is a palindrome or false
otherwise.
Constraints:
- The number of nodes in the list is in the range
[1, 105]
. 0 <= Node.val <= 9
- Example 1:
Input: head = [1,2,2,1]
Output: true
Solve¶
class Solution:
def isPalindrome(self, head: Optional[ListNode]) -> bool:
if not head or not head.next: # Handle empty list or single-node list
return True
# Helper function to reverse a linked list
def reverse_list(node):
before = None
while node:
tmp = node.next
node.next = before
before = node
node = tmp
return before
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast: # Odd number of nodes
slow = slow.next
reversed_second_half = reverse_list(slow)
# Compare the first half and the reversed second half
while reversed_second_half:
if head.val != reversed_second_half.val:
return False
head = head.next
reversed_second_half = reversed_second_half.next
return True
Last update :
August 29, 2023
Created : August 16, 2023
Created : August 16, 2023