给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

/**
 * Definition for singly-linked list.
 * 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)
 *     }
 * }
 */
 
function reverseBetween(head: ListNode | null, left: number, right: number): ListNode | null {
    const dummy = new ListNode(0,head)
    let curr = dummy
    //先移动到 left 的前面的那个节点
    for(let i = 0;i<left-1;i++){
        curr = curr.next
    }
    let pre = curr
    curr = curr.next
    for(let i=0;i<right-left;i++){
        //头插法,需要 pre,curr,next
        let next = curr.next
        curr.next = next.next
        next.next = pre.next
        pre.next = next
    }
 
    return dummy.next
};