<Hard> Reverse Nodes in k-Group (LeetCode : C#)

이도희·2023년 2월 22일
0

알고리즘 문제 풀이

목록 보기
15/185

https://leetcode.com/problems/reverse-nodes-in-k-group/

📕 문제 설명

연결 리스트의 head가 주어질 때 k개의 노드 리스트를 뒤집은 후 변환된 리스트 반환

  • Input
    연결 리스트의 head, k
  • Output
    변환된 리스트

예제

k가 2이므로 2개씩 노드 리스트 기준으로 뒤집으면 된다. 그림에는 색으로 2개 단위로 표현되어 있다.

풀이

  1. k개 별로 잘라서 값을 리스트에 담는다.
  2. 만약 리스트에 담긴 값이 k개인 경우 거꾸로 순회하며 연결 리스트를 만든다.
  3. 만약 리스트에 담긴 값이 k개 보다 작은 경우 (끝 부분) 정방향으로 순회하며 연결 리스트를 만든다.
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode ReverseKGroup(ListNode head, int k) {
        ListNode currNode = new ListNode(0);
        ListNode answerNode = currNode;
        List<int> temp = new List<int>();
        while(head != null)
        {
            temp.Clear();
            for (int i = 0; i < k; i++)
            {
                if (head == null) break;
                temp.Add(head.val);
                head = head.next;
            }

            if (temp.Count < k)
            {
                for (int i = 0; i < temp.Count; i++)
                {
                    currNode.next = new ListNode(temp[i]);
                    currNode = currNode.next;
                }
            }
            else
            {
                for (int i = temp.Count - 1; i >= 0; i--)
                {
                    currNode.next = new ListNode(temp[i]);
                    currNode = currNode.next;
                }
            }
        }

        return answerNode.next;
        
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글