import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode succesor=null;//链接节点
    public ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        if(m==1)
        {
            return reverse(head,n);//反转前n个
        }
        head.next=reverseBetween(head.next,m-1,n-1);//调用递归
        return head;
    }
    public ListNode reverse(ListNode head,int n){//反转前N个节点
        if(n==1){
            succesor=head.next;//将其接为后继
            return head;
        }
        ListNode last=reverse(head.next,n-1);//调用递归
        head.next.next=head;//转向链接
        head.next=succesor;//中途链接
        return last;
    }
}