234. 回文链表
思路:快指针走到末尾,慢指针刚好到中间。其中慢指针将前半部分反转。然后比较
注意:如何在利用快慢指针找中点的同时反转链表,注意两者互不影响就可以实现
代码:
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
# 边界判断
if not head or not head.next:
return True
# 找中点的同时对左半链表进行反转
pre=head
prepre=None
fast, slow = head, head
while fast and fast.next:
pre = slow
slow = slow.next
fast = fast.next.next
pre.next = prepre
prepre = pre
# 奇数个节点时
if fast:
slow = slow.next
# 左右两链表进行比较
while pre and slow:
if pre.val != slow.val:
return False
pre=pre.next
slow = slow.next
return True