funcreverseBetween(head *ListNode, left int, right int)*ListNode {
count :=1
cur := head
// pre 用于记录left前一个节点// post 用于记录 right 后一个节点// subHead 用于记录 待反转的链表区间的头节点
subHead, pre, post :=(*ListNode)(nil),(*ListNode)(nil),(*ListNode)(nil)for count <= right {if count == left {
subHead = cur
}if count < left {
pre = cur
}if count == right {
post = cur.Next
cur.Next =nilbreak}
cur = cur.Next
count++}
newHead, newTail :=reverse(subHead)if pre !=nil{
pre.Next = newHead
newTail.Next = post
return head
}
newTail.Next = post
return newHead
}funcreverse(head *ListNode)(newHead *ListNode, newTail *ListNode){if head ==nil|| head.Next ==nil{return head, head
}
newTail = head
pre, cur, next :=(*ListNode)(nil), head, head
for cur.Next !=nil{
next = cur.Next
cur.Next = pre
pre = cur
cur = next
}
cur.Next = pre
newHead = cur
return}