package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
func isPail( head *ListNode ) bool {
if head == nil || head.Next == nil {
return true
}
slow := head
mid := head.Next
fast := head.Next.Next
for fast != nil && fast.Next != nil {
slow = slow.Next
mid = mid.Next
fast = fast.Next.Next
}
slow.Next = nil
//反转
reserveList := reserve(mid)
//判断回文
for head != nil && reserveList != nil {
if head.Val != reserveList.Val {
return false
}
head = head.Next
reserveList = reserveList.Next
}
return true
}
func reserve(head *ListNode) *ListNode {
res := &ListNode{Val: 0}
for head != nil {
next := head.Next
head.Next = res.Next
res.Next = head
head = next
}
return res.Next
}