@@ -90,4 +90,88 @@ private int[] getListValues(Node head) {
90
90
}
91
91
return Arrays .copyOf (values , i ); // return only filled part
92
92
}
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
+ }
93
177
}
0 commit comments