92. Reverse Linked List II

    /*
     * 92. Reverse Linked List II 
     * 11.26 by Mingyang
     * 头插法,首先用prenode表示m点之前的那个点,mNode表示m点,cur为mNode下一个点,也就是开始遍历的那个点 然后一个点一个点的遍历。
     * 此题跟reverse不包含那道题目一样的,一个pre一个node,cur顺序很重要,只是最终跳出while的条件不一样
     */
     public ListNode reverseBetween(ListNode head, int m, int n) {
            if (head == null)
                return null;
            ListNode dummy = new ListNode(0);
            dummy.next = head;
            ListNode preNode = dummy;
            int i = 1;
            while (preNode.next != null && i < m) {
                preNode = preNode.next;
                i++;
            }
            if (i < m)
                return head;
            ListNode mNode = preNode.next;
            ListNode cur = mNode.next;
            while (cur != null && i < n) {
                mNode.next = cur.next;
                cur.next = preNode.next;
                preNode.next = cur;
                cur = mNode.next;
                i++;
            }
            return dummy.next;
        }
原文地址:https://www.cnblogs.com/zmyvszk/p/5496803.html