-
Notifications
You must be signed in to change notification settings - Fork 0
/
23.py
43 lines (32 loc) · 1.26 KB
/
23.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#1. 각 연결 리스트의 루트를 heap에 저장
#2. 이진 heap 내에서 정렬
#3. heap이 존재하는 동안, 정렬된 구조 pop
#4. 최소힙으로 정렬된 구조를 다시 heappush
#5. return root.next
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
import heapq
class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
# print(len(lists))
root = result = ListNode(None)
heap = []
for i in range(len(lists)):
if lists[i]:
# (tuple(list[i]).val==i번째 리스트의 i번째 요소(우선순위), i, i번째 리스트)
heapq.heappush(heap, (lists[i].val, i , lists[i]))
# print(f"heap:\n{heap}")
while heap:
node = heapq.heappop(heap)
# print(f"node:\n{node}")
idx = node[1]
# print(f"idx:{idx}")
result.next = node[2]
result = result.next
if result.next:
heapq.heappush(heap, (result.next.val, idx, result.next))
# print(f"heap:\n{heap}")
return root.next