Skip to content

Add Merge K sorted LinkedList #721

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 20, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions DataStructures/Lists/Merge_K_SortedLinkedlist.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;

/**
* @author Arun Pandey (https://github.com/pandeyarun709)
*/
public class Merge_K_SortedLinkedlist {

/**
* This function merge K sorted LinkedList
*
* @param a array of LinkedList
* @param N size of array
* @return node
*/
Node mergeKList(Node[] a, int N) {
// Min Heap
PriorityQueue<Node> min = new PriorityQueue<>(Comparator.comparingInt(x -> x.data));

// adding head of all linkedList in min heap
min.addAll(Arrays.asList(a).subList(0, N));

// Make new head among smallest heads in K linkedList
Node head = min.poll();
min.add(head.next);
Node curr = head;

// merging LinkedList
while (!min.isEmpty()) {

Node temp = min.poll();
curr.next = temp;
curr = temp;

// Add Node in min Heap only if temp.next is not null
if (temp.next != null) {
min.add(temp.next);
}
}

return head;
}

private class Node {
private int data;
private Node next;

public Node(int d) {
this.data = d;
next = null;
}
}
}