题目
关键词
链表
代码记录
此解法时间复杂度O(n),空间复杂度O(1)。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
if not head or not head.next:
return True
slow=head
fast=head.next
while fast and fast.next:
slow=slow.next
fast=fast.next.next
second_half_start=self.reverse_list(slow.next)
first_half=head
second_half=second_half_start
while second_half:
if second_half.val==first_half.val:
first_half=first_half.next
second_half=second_half.next
else:
slow.next=self.reverse_list(slow.next)
return False
slow.next=self.reverse_list(second_half_start)
return True
def reverse_list(self,head):
yummy=ListNode(0)
yummy.next=head
cur=head
while cur and cur.next:
cur_head=yummy.next
to_add=cur.next.next
cur.next.next=cur_head
yummy.next=cur.next
cur.next=to_add
return yummy.next