题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
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 left int整型 * @param right int整型 * @return ListNode类 */ public ListNode reverseBetween (ListNode head, int left, int right){ if(head==null || head.next==null || left>right || left==right) { return head; } ListNode resNode = new ListNode(-1); resNode.next = head; ListNode prev = resNode; int step = left -1; for(int i=0; i<left-1; i++) { prev = prev.next; } ListNode rightNode = prev; for(int i=0; i<right-left+1; i++) { rightNode = rightNode.next; } // 取子链表 ListNode leftNode = prev.next; ListNode rightNext = rightNode.next; // 断开子链表 prev.next = null; rightNode.next = null; // 反转子链表 reverseLinkList(leftNode); // 接回子链表 prev.next = rightNode; leftNode.next = rightNext; return resNode.next; } public void reverseLinkList(ListNode head) { ListNode curr = head; ListNode prev = null,next = null; while(curr!=null) { next = curr.next; curr.next = prev; prev = curr; curr = next; } } }