题解 | #链表内指定区间反转#
链表内指定区间反转
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;
}
}
}