这里使用的方法比较复杂: 1.遍历链表并且使用切片接收 2.切片指定范围的翻转(切片的切片): 1.根据切片的切片长度指定for循环终止条件 2.交换 3.将切片的每个元素指定连接关系,最后一个元素的Next赋为nil 4.输出切片的首结点

func reverseBetween(head *ListNode, m int, n int) *ListNode {

	// write code here
	var res []*ListNode
	for head != nil {
		res = append(res, head)
		head = head.Next
	}
	SwapRes(res[m-1 : n])
	node := outRes(res)
	return node
}

func outRes(res []*ListNode) *ListNode {
	for i := 0; i < len(res)-1; i++ {
		if res[i] != nil {
			res[i].Next = res[i+1]
		}
		res[len(res)-1].Next = nil
	}
	return res[0]
}

func SwapRes(res []*ListNode) {
	var l int
	if len(res)%2 == 0 {
		l = len(res) >> 1
	} else {
		l = (len(res) - 1) >> 1
	}
	for i := 0; i < l; i++ {
		tmp := res[i]
		res[i] = res[len(res)-1-i]
		res[len(res)-1-i] = tmp
	}
}