Try   HackMD
tags: LeetCode,Python,Easy

234. Palindrome Linked List

題目連結: Palindrome Linked List

解題方向

  • 用快慢指針找到中間點
  • 反轉後半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: if not head or not head.next: return True slow = head fast = head while fast and fast.next: fast = fast.next.next slow = slow.next reverse_head = self.reverse(slow) temp1 = head temp2 = reverse_head while temp2: if temp1.val != temp2.val: return False temp1 = temp1.next temp2 = temp2.next return True def reverse(self, head): if not head: return None prev = None curr = head while curr: next_node = curr.next curr.next = prev prev = curr curr = next_node return prev