思路: 1.先不考虑边界问题 m --> n 步长为 stepInterval, 例如 2 -> 4 步长为 2, 先定义 slow 、fast节点,移动fast节点 ,两者距离 stepInterval步长,然后fast.next = null,反转链表,slow就是尾节点,fast就是头节点了。同时记录下反转前 slow的前一个节点before,和 fast后的一个节点 after 2.考虑边界问题,m = 1 的情况,反转前 slow 是head头节点,直接返回fast节点作为链表新头节点了。 如果刚开始移动stepInterval步长的时候,fast移动到末尾和没有移动到末尾时 fast已经为空的情况


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

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
        if(m == n || head == null ||m >= n){
            return head;
        }
        
        ListNode slow = head, fast = head;
        //将 [slow , fast ]区间反转
        ListNode before = null , after = null;
        //边界问题处理
        //处理
        int stepInterval = n - m ;
        
        
        while(stepInterval > 0){
            if(fast == null){
                //说明步长不够反转,直接返回
                return head;
            }
            fast = fast.next;
            if(fast != null){
                 //可能刚刚好步长
                 after = fast.next;
            }
            stepInterval -- ;
        }
        int step =  m - 1;
        while(step > 0){
            step --;
            before = slow;
            slow = slow.next;
            fast = fast.next;
            if(fast != null){
              after = fast.next;
            }
        }
        
        //反转
        fast.next = null;
        reverse(slow);
        if(before == null){
            head = fast;
        }else{
          before.next = fast;
        }
        slow.next = after;
        return head;
    }
    private void reverse(ListNode slow){
        ListNode pre = null, currentNode = slow;
        while(currentNode != null){
            ListNode next = currentNode.next;
            currentNode.next = pre;
            pre = currentNode;
            currentNode = next;
        }
        
    }
    
    
    
    
    
    
    
}