题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// write code here
int i = 1;
ListNode cur = head;
ListNode beforeNode = null;
while (i < m) {
if (i == m - 1) {
// 找到开始反转的前一个节点
beforeNode = cur;
}
cur = cur.next;
i++;
}
ListNode pre = null;
//从指定部分反转
while (i <= n) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
i++;
}
if (beforeNode != null) {
//没有从头开始开始前一个节点拼接pre
beforeNode.next = pre;
} else {
//从头开始反转,head 就是pre
head = pre;
}
ListNode newNode = pre;
//从开始反转位置遍历,遇到下一个节点是空,直接拼接后缀部分
while (newNode.next != null) {
newNode = newNode.next;
}
newNode.next = cur;
return head;
}
}
查看5道真题和解析