https://leetcode.com/problems/merge-k-sorted-lists/
오름차순으로 정렬된 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 MergeKLists(ListNode[] lists) {
// 값, 개수
Dictionary<int, int> numDict = new Dictionary<int, int>();
for(int i = 0; i < lists.Length; i++)
{
ListNode curr = lists[i];
while(curr != null)
{
if (numDict.TryGetValue(curr.val, out int value))
{
numDict[curr.val] += 1; // 존재하면 개수 증가
}
else
{
numDict[curr.val] = 1; // 존재 안하면 count 1로 생성
}
curr = curr.next;
}
}
List<int> numList = numDict.Keys.ToList();
numList.Sort(); // key 정렬
ListNode currNode = new ListNode(0);
ListNode answerNode = currNode;
foreach(int num in numList)
{
for (int i = 0; i < numDict[num]; i++) // 개수만큼 값 연결
{
currNode.next = new ListNode(num);
currNode = currNode.next;
}
}
return answerNode.next;
}
}