- Given the two sorted linked lists in java.
- We would to merge two sorted linked lists into single linked list, such that resultant linked list is sorted.
- Let us take an example to understand our problem statement.
We have shown two sorted linked lists in Fig 1 and Fig 2. We would merge two linked list.
- Merged single linked list will contain nodes from both linked lists.
- Merged single linked list shall be sorted one.
Algorithm or recursive method to merge two sorted linked lists in java
- Create merge method, taking head1 and head2 as method parameter
- merge(Node head1, Node head2)
- Create variable mergedList, which will point to head of merge linked list
- Let us look into recursive merge method
- If we reached end of first linked list
- return second linked list
- so that, mergedList start point to second linked list
- If we reached end of second linked list
- return first linked list
- so that, mergedList start pointing first linked list
- If we are here, then compare
- Check head1.data < head2.data
- mergedList point to head1
- now lets move ahead in linked list
- head1.next and head2
- We are here, head1.data >= head2.data
- mergeList points to head2
- lets move ahead in linked list
- head1 and head2.next
- Check head1.data < head2.data
- return mergedList [resultant linked list]
Merged Linked list: We have shown the merged linked list in Fig 4, The merged linked list satisfy the criteria which we have defined earlier.
Program – Merge two sorted singly linked lists in java (recursive algorithm)
1.) MergeLinkedLists Class:
The MergeLinkedLists class has following methods
- insert function will insert elements to single linked list
- print function will print the single linked list
- merge function will merge the two linked lists
package org.learn.Question; import org.learn.List.Node; public class MergeLinkedLists { public static Node merge(Node head1, Node head2) { Node mergedList = null; if(head1 == null) { return head2; } if(head2 == null) { return head1; } if(head1.data < head2.data) { //point to smaller element mergedList = head1; mergedList.next = merge(head1.next, head2); } else { //head1 is large, so pass h //point to smaller element mergedList = head2; //head2 is already consider //now process next node of head2 mergedList.next = merge(head1, head2.next); } return mergedList; } public static void insert(Node head, int data) { while(head.next != null) head = head.next; head.next = new Node(data); } public static void print(Node head) { while(head != null) { System.out.printf("%d ",head.data); head = head.next; } System.out.println(""); } }
2.) App Class:
We are performing the following operation in App class
- We are creating two linked lists in main method.
- MergeLinkedLists.merge will merge two single linked lists
- We are printing the linked list after merging the two linked list
- MergeLinkedLists.print will print the single linked list
package org.learn.Client; import org.learn.List.Node; import org.learn.Question.MergeLinkedLists; public class App { public static void main( String[] args ) { int[] data1 = {1,3,5,9}; Node head1 = new Node(data1[0]); for(int count = 1; count < data1.length; count++) MergeLinkedLists.insert(head1,data1[count]); System.out.printf("Linked list 1 is : "); MergeLinkedLists.print(head1); int[] data2 = {2,4,5,6,10}; Node head2 = new Node(data2[0]); for(int count = 1; count < data2.length; count++) MergeLinkedLists.insert(head2,data2[count]); System.out.printf("Linked list 2 is : "); MergeLinkedLists.print(head2); Node mergedList = MergeLinkedLists.merge(head1, head2); System.out.printf("Merged Linked list is : "); MergeLinkedLists.print(mergedList); } }
3.) Node Class:
- Node class representing the node(s) of a single linked list
package org.learn.List; public class Node { public int data; public Node next; public Node(int num) { this.data = num; this.next = null; } }
Output – Merge two sorted singly linked lists in java (recursive algorithm)
Linked list 1 is : 1 3 5 9 Linked list 2 is : 2 4 5 6 10 Merged Linked list is : 1 2 3 4 5 5 6 9 10
Download code – Merge two sorted linked lists (recursive method) in java