| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | package main/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */// 1 <= m <= n <= len of listfunc reverseBetween(head *ListNode, m int, n int) *ListNode {	var pre *ListNode	curr, next := head, head.Next	for cnt := 1; next != nil; cnt++ {		if cnt == m {			beforeBeg, beg := pre, curr			for ; cnt != n; cnt++ {				curr.Next = pre				pre = curr				curr = next				next = next.Next			}			if beforeBeg != nil { // before beg -> end				beforeBeg.Next = curr			} else {				head = curr // head is end			}			curr.Next = pre // end -> pre			beg.Next = next // beg -> after end			break		}		pre = curr		curr = next		next = next.Next	}	return head}// func main() {// 	n3 := ListNode{3, nil}// 	n2 := ListNode{2, &n3}// 	n1 := ListNode{1, &n2}// 	n0 := ListNode{0, &n1}// 	fmt.Println(list2str(reverseBetween(&n0, 3, 4)))// }
 |