题目链接:https://leetcode.cn/problems/palindrome-linked-list/
难度:简单

描述:
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

题解

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution:
  7. def isPalindrome(self, head: ListNode) -> bool:
  8. def reverse(head):
  9. if head is None or head.next is None:
  10. return head
  11. pre = None
  12. cur = head
  13. while cur:
  14. temp = cur.next
  15. cur.next = pre
  16. pre = cur
  17. cur = temp
  18. return pre
  19. def get_mid(head):
  20. slow, fast = head, head.next
  21. while fast and fast.next:
  22. slow = slow.next
  23. fast = fast.next.next
  24. return slow
  25. mid_node = get_mid(head)
  26. mid_node.next = reverse(mid_node.next)
  27. left, right = head, mid_node.next
  28. while right:
  29. if left.val != right.val:
  30. mid_node.next = reverse(mid_node.next)
  31. return False
  32. left = left.next
  33. right = right.next
  34. mid_node.next = reverse(mid_node.next)
  35. return True