[LeetCode] 92. Reverse Linked List II

Chobby·2024년 12월 16일
1

LeetCode

목록 보기
126/194

😎풀이

ListNode를 제 자리에서 회전시킬 수 있냐가 관건인 문제이다.

포인터 세개를 두고 다음과 같은 형식으로 Swap을 진행한다.

/**
 * 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 {
    if(!head || left === right) return head
    const dummyNode = new ListNode(0)
    dummyNode.next = head

    let prev = dummyNode
    for(let i = 0; i < left - 1; i++) prev = prev.next

    const start = prev.next
    let then = start.next
    for(let i = 0; i < right - left; i++) {
        start.next = then.next
        then.next = prev.next
        prev.next = then
        then = start.next
    }

    return dummyNode.next
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글