import java.util.*;
/*
* 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) {
return head;
}
ListNode front_front = m == 1 ? null : head;
ListNode front;
ListNode rear;
int index = 0; //辅助查找front_front和rear的索引
while (++index < m - 1) {
front_front = front_front.next;
}
front = front_front == null ? head : front_front.next;
rear = front.next;
index = m;
while (++index < n) {
rear = rear.next;
}
if (front_front == null) {
return overturn(front, rear.next);
}
front_front.next = overturn(front, rear.next);
return head;
}
private ListNode overturn(ListNode x, ListNode rear) {
ListNode i = x;
ListNode j = x.next;
while (true) {
if (j == rear) {
x.next = rear;
return i;
}
x.next = i;
i = j;
j = j.next;
i.next = x.next;
}
}
}