Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c081cbd

Browse files
LC#23 2nd approach- merge K sorted linkedlists
1 parent 7dc907a commit c081cbd

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

β€ŽLeetcode/leetcodeTags/LinkedList/MergeKSortedLists23.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package LinkedList;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.Comparator;
6+
import java.util.List;
37
import java.util.PriorityQueue;
48

59
public class MergeKSortedLists23 {
@@ -44,4 +48,72 @@ public ListNode mergeKLists(ListNode[] lists) {
4448
return dummy.next;
4549
}
4650

51+
// using arraylist and sorting
52+
// time O(NlogN) space O(N)
53+
public ListNode mergeKLists1(ListNode[] lists) {
54+
55+
if (lists == null || lists.length == 0)
56+
return null;
57+
58+
List<Integer> allnodes = new ArrayList<Integer>();
59+
60+
for (ListNode node : lists) {
61+
while (node != null) {
62+
allnodes.add(node.val);
63+
node = node.next;
64+
}
65+
}
66+
67+
Collections.sort(allnodes);
68+
69+
ListNode dummy = new ListNode(-1);
70+
ListNode tail = dummy;
71+
72+
for (int value : allnodes) {
73+
tail.next = new ListNode(value);
74+
tail = tail.next;
75+
}
76+
77+
return dummy.next;
78+
}
79+
80+
// heap solution
81+
public ListNode mergeKLists2(ListNode[] lists) {
82+
83+
PriorityQueue<ListNode> minheap = new PriorityQueue<ListNode>(lists.length, new Comparator<ListNode>() {
84+
@Override
85+
public int compare(ListNode l1, ListNode l2) {
86+
if (l1.val < l2.val)
87+
return -1;
88+
else if (l1.val > l2.val)
89+
return 1;
90+
else
91+
return 0;
92+
}
93+
});
94+
95+
96+
// using java 8
97+
98+
// PriorityQueue<ListNode> minheap8 = new PriorityQueue<>(lists.length, (a,b) -> a.val - b.val);
99+
100+
ListNode dummy = new ListNode(-1);
101+
ListNode tail = dummy;
102+
103+
for (ListNode nodes : lists) {
104+
if (nodes != null)
105+
minheap.add(nodes);
106+
}
107+
108+
while (!minheap.isEmpty()) {
109+
tail.next = minheap.poll();
110+
tail = tail.next;
111+
112+
if (tail.next != null)
113+
minheap.add(tail.next);
114+
}
115+
116+
return dummy.next;
117+
}
118+
47119
}

0 commit comments

Comments
(0)

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /