/* * 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; }