请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
# 寻找中点 反转前面面部分
# 两个指针 一个从头开始一个从中点开始 进行比对 == return True != return false
if head is None:
return True
# 快慢指针寻找中点 并且 反转前面部分
fast,slow = head,head
per = None
flag = True # 判断奇偶 Trun 代表偶 False 代表 奇
while fast:
# 寻找中点代码
fast = fast.next
if fast:
fast = fast.next
else:
flag = False
# 翻转
nxt = slow.next
slow.next = per
per = slow
slow = nxt
befor,after = slow,per
# 进行比对
if not flag:
after = after.next
while befor:
if after.val == befor.val:
after,befor=after.next,befor.next
else:
return False
return True