package main import "fmt" // ListNode Definition for singly-linked list. type ListNode struct { Val int Next *ListNode } func isPalindrome(head *ListNode) bool { srcHead := head head = head.Next // var left, right *ListNode cnt := 1 for head != nil { head = head.Next cnt++ } head = srcHead.Next lastNode := srcHead srcHead.Next = nil half := cnt / 2 half-- for range half { p := head.Next head.Next = lastNode lastNode = head head = p } if cnt&1 == 1 { head = head.Next } for head != nil && lastNode != nil { if head.Val != lastNode.Val { return false } head = head.Next lastNode = lastNode.Next } if head != nil || lastNode != nil { return false } return true } func main() { isPalindrome := isPalindrome(&ListNode{ Val: 1, Next: &ListNode{ Val: 2, }, }) fmt.Printf("isPalindrome: %v\n", isPalindrome) }