@@ -56,6 +56,50 @@ public static <E extends Comparable<E>> SingleLinkedList<E> mergeTwoSortedLists(
56
56
return intersectedList ;
57
57
}
58
58
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
+
59
103
public static void main (String a []) {
60
104
SingleLinkedList <Integer > linkedList1 = new SingleLinkedList <>();
61
105
linkedList1 .add (00 );
@@ -72,7 +116,14 @@ public static void main(String a[]) {
72
116
linkedList2 .add (55 );
73
117
linkedList2 .add (67 );
74
118
linkedList2 .add (89 );
119
+ linkedList2 .add (99 );
75
120
linkedList2 .printList ();
76
121
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 ();
77
128
}
78
129
}
0 commit comments