| 
1 | 1 | package LinkedList;  | 
2 | 2 | 
 
  | 
 | 3 | +import java.util.ArrayList;  | 
 | 4 | +import java.util.Collections;  | 
 | 5 | +import java.util.Comparator;  | 
 | 6 | +import java.util.List;  | 
3 | 7 | import java.util.PriorityQueue;  | 
4 | 8 | 
 
  | 
5 | 9 | public class MergeKSortedLists23 {  | 
@@ -44,4 +48,72 @@ public ListNode mergeKLists(ListNode[] lists) {  | 
44 | 48 | 		return dummy.next;  | 
45 | 49 | 	}  | 
46 | 50 | 
 
  | 
 | 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 | + | 
47 | 119 | }  | 
0 commit comments