| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | 
							- package main
 
- /**
 
-  * Definition for singly-linked list.
 
-  * type ListNode struct {
 
-  *     Val int
 
-  *     Next *ListNode
 
-  * }
 
-  */
 
- // 1 <= m <= n <= len of list
 
- func 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)))
 
- // }
 
 
  |