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;
}
그닥 좋은 결과는 아니지만, 솔루션 코드들도 대동소이 한듯.
'Leetcode > Top 100 Liked' 카테고리의 다른 글
[Linked List][Medium] 142. Linked List Cycle II (0) | 2024.04.12 |
---|---|
[Linked List][Easy] 141. Linked List Cycle (1) | 2024.04.11 |
[Linked List][Medium] 24. Swap Nodes in Pairs. (0) | 2024.04.11 |
[Linked List][Hard] 23. Merge k Sorted List (0) | 2024.04.09 |
[Linked List][Easy] 21. Merge Two Sorted Lists. (0) | 2024.04.09 |