/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
function reverseBetween(head, m, n) {
// write code here
if (!head || m === n) {
return head; // 如果链表为空或 m === n,直接返回原链表
}
// 创建一个虚拟头节点,简化边界条件处理
let dummy = new ListNode(0);
dummy.next = head;
let prev = dummy;
// 找到第 m-1 个节点,即反转区间的前一个节点
for (let i = 1; i < m; i++) {
prev = prev.next;
}
// 开始反转区间 [m, n]
let curr = prev.next; // curr 指向第 m 个节点
let temp = null;
let reversePrev = null; // 用于反转区间内的链表
for (let i = m; i <= n; i++) {
temp = curr.next; // 保存下一个节点
curr.next = reversePrev; // 反转当前节点的指针
reversePrev = curr; // 移动 reversePrev
curr = temp; // 移动 curr
}
// 将反转后的区间连接到原链表
prev.next.next = curr; // 第 m 个节点(反转后的最后一个节点)连接到第 n+1 个节点
prev.next = reversePrev; // 第 m-1 个节点连接到反转后的第一个节点
return dummy.next; // 返回新链表的头节点
}
module.exports = {
reverseBetween: reverseBetween,
};