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) {
if (m == n) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode prev = dummy;
// 开始需要翻转的头结点
for (int i = 1; i < m; i++) {
prev = prev.next;
}
// 要翻转的头结点
ListNode midHead = prev.next;
// 右侧不动的头结点
ListNode tail = midHead;
for (int i = m; i <= n; i++) {
tail = tail.next;
}
// 翻转mid,这里把preTmp指向tail 主要是把他当做前节点,反转后,就在尾部了
ListNode preTmp = tail;
ListNode cur = midHead;
while (cur != tail) {
ListNode next = cur.next;
cur.next = preTmp;
preTmp = cur;
cur = next;
}
prev.next = preTmp;
return dummy.next;
}
}