題目:
題解:
func reverseList(head *ListNode) *ListNode {var prev, cur *ListNode = nil, headfor cur != nil {nextTmp := cur.Nextcur.Next = prevprev = curcur = nextTmp}return prev
}func endOfFirstHalf(head *ListNode) *ListNode {fast := headslow := headfor fast.Next != nil && fast.Next.Next != nil {fast = fast.Next.Nextslow = slow.Next}return slow
}func isPalindrome(head *ListNode) bool {if head == nil {return true}// 找到前半部分鏈表的尾節點并反轉后半部分鏈表firstHalfEnd := endOfFirstHalf(head)secondHalfStart := reverseList(firstHalfEnd.Next)// 判斷是否回文p1 := headp2 := secondHalfStartresult := truefor result && p2 != nil {if p1.Val != p2.Val {result = false}p1 = p1.Nextp2 = p2.Next}// 還原鏈表并返回結果firstHalfEnd.Next = reverseList(secondHalfStart)return result
}