I was trying out the merging of two sorted linked list.
The code snippet doesn't work for below two 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 the output for below programs turns out to be this :
Output :  1->2->3->4->5->6->7->8->9->null // element 10 is missing.
Am I missing something ? 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));
    }
}
 
     
     
     
     
     
     
    