import java.util.*;

public class Solution {
    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        ListNode h = new ListNode(-1);
        h.next = head;

        ListNode p = h;
        ListNode pre = p;

        int t = m;

        while(t-- > 0) {
            pre = p;
            p = p.next;
        }

        pre.next = reverse(p, n - m + 1);
        return h.next;
    }

    private ListNode reverse(ListNode head, int size) {
        ListNode l = null;
        ListNode r = head;
        ListNode t;

        while (size-- > 0) {
            t = r.next;
            r.next = l;

            l = r;
            r = t;
            if (size == 0) {
                head.next = t;
            }
        }
        return l;
    }
}