题目:
思路:
https://blog.csdn.net/DarkAndGrey/article/details/122146216
public ListNode reverseBetween(ListNode head, int left, int right) {if(head == null || right == left){return head;// 头节点为null,链表为空,反转链表没有意义(没有节点给你反转)// right == left ,反转一个节点,等于没反转。也没有反转的意义// 直接返回 head}ListNode newHead = new ListNode(0,head);ListNode prev = newHead;for(int i = 0; i < left - 1; i++){prev = prev.next;if(prev == null){// 防止空指针异常,另外防止 left 位置不合法(链表节点没有那么多)return head;}}ListNode rightNode = prev.next;for(int i = 0;i < right - left;i++){rightNode = rightNode.next;if(rightNode == null){//防止空指针异常,另外防止 right 位置不合法(链表节点没有那么多)return head;}}ListNode rightNodeNext = rightNode.next;ListNode[] reverse = myReverse(prev.next,rightNode);prev.next = reverse[0];rightNode = reverse[1];rightNode.next = rightNodeNext;return newHead.next;}public static ListNode[] myReverse(ListNode left,ListNode right){ListNode prev = right.next;ListNode p = left;while( prev != right){ListNode pNext = p.next;p.next = prev;prev = p;p = pNext;}return new ListNode[]{right,left};}