| 273 | } |
| 274 | |
| 275 | private Node merge(Node head1, Node head2) { |
| 276 | Node finalHead = new Node(-1); |
| 277 | Node temp = finalHead; |
| 278 | |
| 279 | while(head1 != null && head2 != null) { |
| 280 | if(head1.data <= head2.data) { |
| 281 | temp.next = head1; |
| 282 | head1 = head1.next; |
| 283 | } else { |
| 284 | temp.next = head2; |
| 285 | head2 = head2.next; |
| 286 | } |
| 287 | temp = temp.next; |
| 288 | } |
| 289 | |
| 290 | while(head1 != null) { |
| 291 | temp.next = head1; |
| 292 | head1 = head1.next; |
| 293 | temp = temp.next; |
| 294 | } |
| 295 | |
| 296 | while(head2 != null) { |
| 297 | temp.next = head2; |
| 298 | head2 = head2.next; |
| 299 | temp = temp.next; |
| 300 | } |
| 301 | |
| 302 | return finalHead.next; |
| 303 | } |
| 304 | |
| 305 | public void mergeSort() { |
| 306 | head = mergeSortHelper(head); |