leetcode_gym/_problems/palindromicLinkList.md
2026-08-25 19:14:07 -06:00

1.5 KiB

layout, title, last_solved, category, leetcode_url, status
layout title last_solved category leetcode_url status
page Palindrome Linked List 2020-07-22 linked lists, palindrome https://leetcode.com/problems/palindrome-linked-list/ Attempted

Problem

Given a singly linked list, determine if it is a palindrome.

Example 1:

Input: 1->2
Output: false
Example 2:

Input: 1->2->2->1
Output: true

Solution

  • Have a slow and fast poiner, and find middle.
  • Once at middle, reverse the second half of the list
  • Then Iterate both first half and second half to ensure they are the same

Note:

  • Whichever pointer gets to the end of the list first, make that your break condition (in while loop)

{% highlight python %}

def isPalindrome(self, head: ListNode) -> bool:

def reversed(head):
    
    prev = None
    curr = head
    next = None
    
    while curr:
        next = curr.next
        curr.next = prev
        prev = curr
        curr = next
    
    return prev

# find mid
slow = head
fast = head

while fast and fast.next:
    fast = fast.next.next
    slow = slow.next

# reverse second half of list
slow = reversed(slow)
fast = head

# iterate both slow and fast and make sure they're the same
while slow:
    
    if slow.val!=fast.val:
        return False
    slow = slow.next
    fast = fast.next

return True

{% endhighlight %}

image1