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