[LeetCode] 25. Reverse Nodes in k-Group

Chobby·2024년 8월 26일
1

LeetCode

목록 보기
62/194

Node를 원하는 만큼 뒤집을 수 있는지 검증하는 문제이다.

탐색은 기존과 동일하게 진행되며 중요 부분은 k 만큼의 배열을 뒤집는 과정이다.

😎풀이

function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
    // 헤드가 null이거나 k가 1이면 변경 없이 반환
    if (!head || k === 1) return head;

    // 더미 노드 생성
    const dummy = new ListNode(0);
    dummy.next = head;
    
    // 현재 그룹의 이전 노드, 시작 노드, 끝 노드를 추적
    let prevGroupTail = dummy;
    let start = head;
    let end = head;

    while (start) {
        // k개의 노드 탐색
        for (let i = 0; i < k - 1 && end; i++) {
            end = end.next;
        }

        if (!end) break;

        // 다음 그룹의 시작 노드를 저장
        const nextGroupStart = end.next;

        // 뒤집기
        [start, end] = reverseList(start, end);

        // 뒤집기 후 연결
        prevGroupTail.next = start;
        end.next = nextGroupStart;

        // 다음 그룹 이동
        prevGroupTail = end;
        start = end.next;
        end = start;
    }

    return dummy.next;
}

// 시작과 끝 노드 사이의 리스트를 뒤집는 함수
function reverseList(start: ListNode, end: ListNode): [ListNode, ListNode] {
    let prev = null;
    let curr = start;
    const endNext = end.next;

    while (curr !== endNext) {
        const next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }

    return [end, start];
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글