Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 439032f

Browse files
author
Ram swaroop
committed
merge two lists: done (recursive way)
1 parent b84866b commit 439032f

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

src/me/ramswaroop/linkedlists/MergeTwoSortedLists.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,50 @@ public static <E extends Comparable<E>> SingleLinkedList<E> mergeTwoSortedLists(
5656
return intersectedList;
5757
}
5858

59+
/**
60+
* Recursive method to merge two sorted lists into one sorted list.
61+
*
62+
* NOTE: You can make {@param mergedList} as static and not pass as params
63+
* to this method.
64+
*
65+
* @param node1
66+
* @param node2
67+
* @param <E>
68+
*/
69+
public static <E extends Comparable<E>> SingleLinkedNode<E> mergeTwoSortedLists(SingleLinkedList<E> mergedList,
70+
SingleLinkedNode<E> node1,
71+
SingleLinkedNode<E> node2) {
72+
73+
if (node1 == null && node2 == null) return null;
74+
75+
// if either of the list runs out first
76+
if (node1 == null) {
77+
mergeTwoSortedLists(mergedList, node1, node2.next);
78+
mergedList.addFirst(node2.item);
79+
return node2;
80+
}
81+
if (node2 == null) {
82+
mergeTwoSortedLists(mergedList, node1.next, node2);
83+
mergedList.addFirst(node1.item);
84+
return node1;
85+
}
86+
87+
if (node1.item.compareTo(node2.item) < 0) { // node1 is smaller, so add it and advance the pointer
88+
mergeTwoSortedLists(mergedList, node1.next, node2);
89+
mergedList.addFirst(node1.item);
90+
return node1;
91+
} else if (node1.item.compareTo(node2.item) > 0) {
92+
mergeTwoSortedLists(mergedList, node1, node2.next);
93+
mergedList.addFirst(node2.item);
94+
return node2;
95+
} else { // both nodes are equal so add both
96+
mergeTwoSortedLists(mergedList, node1.next, node2.next);
97+
mergedList.addFirst(node1.item);
98+
mergedList.addFirst(node2.item);
99+
return node1;
100+
}
101+
}
102+
59103
public static void main(String a[]) {
60104
SingleLinkedList<Integer> linkedList1 = new SingleLinkedList<>();
61105
linkedList1.add(00);
@@ -72,7 +116,14 @@ public static void main(String a[]) {
72116
linkedList2.add(55);
73117
linkedList2.add(67);
74118
linkedList2.add(89);
119+
linkedList2.add(99);
75120
linkedList2.printList();
76121
mergeTwoSortedLists(linkedList1, linkedList2).printList();
122+
System.out.println("====================");
123+
linkedList1.printList();
124+
linkedList2.printList();
125+
SingleLinkedList<Integer> mergedList = new SingleLinkedList<>();
126+
mergeTwoSortedLists(mergedList, linkedList1.head, linkedList2.head);
127+
mergedList.printList();
77128
}
78129
}

0 commit comments

Comments
 (0)