import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// 先查找m
ListNode result = new ListNode(1);
result.next = head;
ListNode left = result;
ListNode cur = head;
for (int i = 1; i < m; ++i) {
left = cur;
cur = cur.next;
}
// 反转
// 头插法,不断的把m以及m后面的node弄到m前面的节点指针
// 所以这段的做法是把当前节点的后一个节点前移
for (int i = m; i < n; ++i) {
// 设置前指针
ListNode temp = cur.next;
// 当前指针指向后一个节点的后一个
cur.next = temp.next;
// 前一节点的下一个指向当前节点
temp.next = left.next;
// 当前节点换位下一个节点
left.next = temp;
}
return result.next;
}
}