给你单链表的头指针 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
};