funcisPalindrome(head *ListNode)bool { if head == nil { returntrue } var cp = Copy(head) rcp := reverseList2(cp) for ;head.Next != nil && rcp.Next != nil; { if head.Val != rcp.Val { returnfalse } else { head = head.Next rcp = rcp.Next } } returntrue }
funcreverseList2(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } last := reverseList2(head.Next) head.Next.Next = head head.Next = nil return last }
funcCopy(head *ListNode) *ListNode { if head == nil { returnnil }
var result = &ListNode{} result.Val = head.Val result.Next = Copy(head.Next) return result }