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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
*/
var stack [] *ListNode
func push(val *ListNode){
    stack =append(stack,val)
}
func reverse(start int,end int){
    for i,j:=start,end;i<j;i,j=i+1,j-1{
        stack[i],stack[j]=stack[j],stack[i]
    }
}
func reverseBetween( head *ListNode ,  m int ,  n int ) *ListNode {
    // write code here
    if(head == nil || head.Next == nil){
        return head
    }
    for head != nil{
        push(head)
        head=head.Next
    }
    reverse(m-1,n-1)
    newHead:=&ListNode{}
    resHead:=newHead
    for i:=0;i<len(stack);i++{
        newHead.Next = &ListNode{Val: stack[i].Val}
        newHead=newHead.Next
        fmt.Println(stack[i])
    }
    
    return resHead.Next
}