时间复杂度(O(n)),思想:1/2链表翻转
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
def reverse_node(head):
p, q = head, head.next
while q != None:
p.next = q.next
q.next = head
head = q
q = p.next
return head
p, _len = head, 0
while p != None: p, _len = p.next, _len + 1
if _len < 2: return True
p = head
for _ in range((_len - 1) // 2): p = p.next
head2 = reverse_node(p.next)
while head != None and head2 != None:
if head.val != head2.val: return False
head, head2 = head.next, head2.next
return True