import java.util.*;
public class Solution {
    public static ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode node=new ListNode(-1);
        node.next=head;
        ListNode pre=node;
        for(int i=1;i<m;i++){
            pre=pre.next;
        }
        ListNode right=pre.next;
        ListNode left=pre.next;
        for(int i=m;i<n;i++){
            right=right.next;
        }
        ListNode last=right.next;
        
        pre.next=null;
        right.next=null;

        ListNode list=null;
        ListNode cur_left=left;
        while(cur_left!=null){
            ListNode cur_list=cur_left.next;
            cur_left.next=list;
            list=cur_left;
            cur_left=cur_list;
        }

        pre.next=right;
        left.next=last;

        return node.next;
    }
}