private Node sortedMerge(Node head1, Node head2, boolean isAscending){
        if(head1 == null){
            return head2;
        }
        if(head2 == null){
            return head1;
        }
        if(isAscending){
            if(head1.data <= head2.data){
                head1.next = sortedMerge(head1.next, head2, isAscending);
                return head1;
            }else{
                head2.next = sortedMerge(head1,head2.next, isAscending);
                return head2;
            }
        }else{
            if(head1.data >= head2.data){
                head1.next = sortedMerge(head1.next, head2, isAscending);
                return head1;
            }else{
                head2.next = sortedMerge(head1,head2.next, isAscending);
                return head2;
            }
        }
    }
http://www.geeksforgeeks.org/merge-sort-for-linked-list/
Test cases
0 nodes
1 nodes
2 nodes
3 nodes
fully sorted
reverse sorted
src/com/interview/linklist/MergeSortLinkList.java