题解 | 链表内指定区间反转
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/*class ListNode { * val: number * next: ListNode | null * constructor(val?: number, next?: ListNode | null) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ export function reverseBetween(head: ListNode, m: number, n: number): ListNode { if (!head || m == n) return head; const dummy = new ListNode(0); dummy.next = head; let pre: ListNode = dummy; // 移动到前驱节点,即m-1个 for (let i = 0; i < m-1; i++) { pre = pre.next; } let mNode = pre.next; let curr: ListNode | null = mNode; let prev: ListNode | null = null; let next: ListNode | null = null; // 反转n-m+1个节点 for (let i = 0; i < (n - m + 1); i++) { next = curr.next; curr.next = prev; prev = curr; curr = next; } // 连接反转后的部分 pre.next=prev mNode.next=curr return dummy.next }