@@ -90,4 +90,88 @@ private int[] getListValues(Node head) {
9090 }
9191 return Arrays .copyOf (values , i ); // return only filled part
9292 }
93+
94+ @ Test
95+ void testMergeWithNullListsInArray () {
96+ Node list1 = new Node (1 , new Node (3 ));
97+ Node list2 = null ;
98+ Node list3 = new Node (2 , new Node (4 ));
99+ Node [] lists = {list1 , list2 , list3 };
100+
101+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
102+ Node mergedHead = merger .mergeKList (lists , lists .length );
103+
104+ int [] expectedValues = {1 , 2 , 3 , 4 };
105+ int [] actualValues = getListValues (mergedHead );
106+ assertArrayEquals (expectedValues , actualValues , "Should handle null lists mixed with valid lists" );
107+ }
108+
109+ @ Test
110+ void testMergeWithDuplicateValues () {
111+ Node list1 = new Node (1 , new Node (1 , new Node (3 )));
112+ Node list2 = new Node (1 , new Node (2 , new Node (3 )));
113+ Node list3 = new Node (3 , new Node (3 ));
114+ Node [] lists = {list1 , list2 , list3 };
115+
116+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
117+ Node mergedHead = merger .mergeKList (lists , lists .length );
118+
119+ int [] expectedValues = {1 , 1 , 1 , 2 , 3 , 3 , 3 , 3 };
120+ int [] actualValues = getListValues (mergedHead );
121+ assertArrayEquals (expectedValues , actualValues , "Should handle duplicate values correctly" );
122+ }
123+
124+ @ Test
125+ void testMergeWithZeroLength () {
126+ Node [] lists = {};
127+
128+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
129+ Node mergedHead = merger .mergeKList (lists , 0 );
130+
131+ assertNull (mergedHead , "Should return null for zero-length array" );
132+ }
133+
134+ @ Test
135+ void testMergeWithNegativeNumbers () {
136+ Node list1 = new Node (-5 , new Node (-1 , new Node (3 )));
137+ Node list2 = new Node (-3 , new Node (0 , new Node (2 )));
138+ Node [] lists = {list1 , list2 };
139+
140+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
141+ Node mergedHead = merger .mergeKList (lists , lists .length );
142+
143+ int [] expectedValues = {-5 , -3 , -1 , 0 , 2 , 3 };
144+ int [] actualValues = getListValues (mergedHead );
145+ assertArrayEquals (expectedValues , actualValues , "Should handle negative numbers correctly" );
146+ }
147+
148+ @ Test
149+ void testMergeIdenticalLists () {
150+ Node list1 = new Node (1 , new Node (2 , new Node (3 )));
151+ Node list2 = new Node (1 , new Node (2 , new Node (3 )));
152+ Node list3 = new Node (1 , new Node (2 , new Node (3 )));
153+ Node [] lists = {list1 , list2 , list3 };
154+
155+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
156+ Node mergedHead = merger .mergeKList (lists , lists .length );
157+
158+ int [] expectedValues = {1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 };
159+ int [] actualValues = getListValues (mergedHead );
160+ assertArrayEquals (expectedValues , actualValues , "Should merge identical lists correctly" );
161+ }
162+
163+ @ Test
164+ void testMergeAlreadySortedSequence () {
165+ Node list1 = new Node (1 , new Node (2 ));
166+ Node list2 = new Node (3 , new Node (4 ));
167+ Node list3 = new Node (5 , new Node (6 ));
168+ Node [] lists = {list1 , list2 , list3 };
169+
170+ MergeKSortedLinkedList merger = new MergeKSortedLinkedList ();
171+ Node mergedHead = merger .mergeKList (lists , lists .length );
172+
173+ int [] expectedValues = {1 , 2 , 3 , 4 , 5 , 6 };
174+ int [] actualValues = getListValues (mergedHead );
175+ assertArrayEquals (expectedValues , actualValues , "Should handle already sorted sequence" );
176+ }
93177}
0 commit comments