public ListNode reverseBetween(ListNode head, int m, int n){ //新建一个节点,并将这个节点和原有链表联系起来 ListNode preHeadNode = new ListNode(0); preHeadNode.next = head; //新建并初始化两个指针 ListNode pre = preHeadNode; ListNode cur = preHeadNode.next; //移动这两个指针,直到cur指向要反转的第一个节点,pre指向它的前面 for(int i = 0; i < m - 1; i++){ cur = cur.next; pre = pre.next; } // for(int i = 0; i < m - n;i++){ //先拿到要删除(即要插入)的节点 ListNode remove = cur.next; //经过下面这步,跳过了cur的下一个节点。达到了把这个节点删除的效果 cur.next = cur.next.next; //接下来是插入操作 remove.next = pre.next; pre.next = remove; } return preHeadNode.next; }