题意:判断一个链表是否是回文链表,类似于判断回文数组。两种思路,一是将链表遍历放入数组,然后比较数组从前往后和从后往前是否一样,空间复杂度O(n),第二种方法是反转链表法,比较有意义,空间复杂度O(1)
瓦特了,svalue,fast,fast.next,cur都是节点,所以可以直接while svalue,毕竟节点.value才是个值。
class Solution:
def isPalindrome(self,head):
if head is None:
return True
first_half_end=self.half(head)
second_half_star=self.reverse(first_half_end.next)#注意是next值
fvalue=head
svalue=second_half_star
while svalue:
if fvalue.val != svalue.val:#注意是val值
return False
fvalue=fvalue.next
svalue=svalue.next
first_half_end.next=self.reverse(second_half_star)
return True
def half(self,head):#快慢指针得中点函数
fast=head
slow=head
while fast.next and fast.next.next:
fast=fast.next.next
slow=slow.next
return slow
def reverse(self,head):#双指针反转链表
pre=None
cur=head
while cur :
tmp=cur.next
cur.next=pre
pre=cur
cur=tmp
return pre