Leetcode/Top 100 Liked

[Linked List][Hard] 25. Reverse Nodes in K-Group

자전거통학 2024. 4. 11. 23:09

Q. 주어진 list를 k 그룹 단위로 reverse하라. 이때 해당 단위가 k 개가 되지 않으면 그냥 두어라. 

 

Solution. 

 list를 뒤집는 방법을 안다면 크게 어렵지는 않을 것 같다. 

 단위로 뒤집고 연결 부위 예외 처리를 충분히 해 준다. 

 

더보기

 

public ListNode ReverseKGroup(ListNode head, int k) 
{
    ListNode Reverse(ListNode head, int cnt, out ListNode outNext)
    {
        // check count.
        ListNode node = head;
        int count = cnt;
        outNext = null;
        while(true)
        {
            if(node == null)    return head;
            if(--count == 0)    break;
            node = node.next;
        }

        ListNode prev = null;
        node = head;
        while(node != null)
        {
            // Console.WriteLine( "> " + node.val); 
            ListNode next = node.next;
            node.next = prev;
            prev = node;
            node = next;     outNext = next;
            if(--cnt == 0)   break;
        }
        return prev;
    }


    ListNode curNode = head;
    ListNode prevTail = null;
    head = null;
    while(curNode != null)
    {
        ListNode next;
        ListNode changedHead = Reverse(curNode, k, out next);

        // Console.WriteLine(curNode.val + ", " + changedHead.val + ", " + (next!=null ? next.val : 0));

        if(head == null)
            head = changedHead;
        if(prevTail != null)
            prevTail.next = changedHead;
        prevTail = curNode;
        curNode = next;
    }

    return head;
}

 

그닥 좋은 결과는 아니지만, 솔루션 코드들도 대동소이 한듯.