java - Merging two sorted linked list of unequal length -


i trying out merging of 2 sorted linked list.

the code snippet doesn't work below 2 list :

list 1 : 1->3->5->7->9->null list 2 : 2->4->6->8->10->null  expected list : 1->2->3->4->5->6->7->8->9->10->null 

but output below programs turns out :

output :  1->2->3->4->5->6->7->8->9->null // element 10 missing. 

am missing ? live demo : http://ideone.com/o7mblo

class node {      node next;     int value;      node(int val) {         this.value = val;         this.next = null;     }      @override     public string tostring() {         node cur = this;         string str = "";          while(cur != null) {             str += cur.value+"->";             cur = cur.next;         }          return str;     } }  class mergell {      public static node merge(node n1, node n2) {          node result = null;          if(n1 != null && n2 != null) {             if(n1.value < n2.value) {                 result = n1;                 result.next = merge(n1.next, n2);             } else {                 result = n2;                 result.next = merge(n1, n2.next);             }         }         return result;     }      public static void main(string[] args) {         node n1 = new node(1);         node n3 = new node(3);         node n5 = new node(5);         node n7 = new node(7);         node n9 = new node(9);          n1.next = n3;         n3.next = n5;         n5.next = n7;         n7.next = n9;         n9.next = null;          node n2 = new node(2);         node n4 = new node(4);         node n6 = new node(6);         node n8 = new node(8);         node n10 = new node(10);          n2.next = n4;         n4.next = n6;         n6.next = n8;         n8.next = n10;         n10.next = null;          system.out.println("merge : " + merge(n1, n2));     } } 

you need add 2 more conditions, when either n1 or n2 exhausts earlier. so, condition - n1 != null && n2 != null, work in case when both list of same size.

just add code below 2 conditions, after if:

if(n1 != null && n2 != null) {         if(n1.value < n2.value) {             result = n1;             result.next = merge(n1.next, n2);         } else {             result = n2;             result.next = merge(n1, n2.next);         }  } else if (n1 != null) {       result = n1;  // add elements of `n1` `result` } else if (n2 != null) {     result = n2;  // add elements of `n2` `result` } 

actually, you don't need build new result list there. can extend 1 of passed nodes.

you can modify method below:

public static node merge(node n1, node n2) {     if (n1 == null) return n2;     if (n2 == null) return n1;      if (n1.value < n2.value) {         n1.next = merge(n1.next, n2);         return n1;     } else {         n2.next = merge(n2.next, n1);         return n2;     } } 

Comments