package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
  * 
  * @param head ListNode类 
  * @param m int整型 
  * @param n int整型 
  * @return ListNode类
*/
func reverseBetween( head *ListNode ,  m int ,  n int ) *ListNode {
    // write code here
    start, end := m, n
    current := head
	var tmpRes, endNode1 *ListNode
	for index := 1; index <= end; index++ {
		if index < start {
			if index+1 == start {
				endNode1 = current
			}
			current = current.Next
			continue
		}
		tmp := current.Next
		current.Next = tmpRes
		tmpRes = current
		current = tmp
	}
	if endNode1 != nil {
		endNode1.Next = tmpRes
	} else {
		head = tmpRes
	}
	//找到尾部
	if current != nil {
		tmp := tmpRes
		for tmp != nil && tmp.Next != nil {
			tmp = tmp.Next
		}
		tmp.Next = current
	}
	return head
}