private ListNode sort(ListNode head){
    	
    	if(head == null || head.next == null){
    		return head;
    	}
    	
    	ListNode mid = findMid(head);
    	
    	ListNode right = mid.next;
    	mid.next = null;
    	
    	ListNode left = head;
    	
    	left  = sort(left);
    	
    	right = sort(right);
    	
    	ListNode result = merge(left, right);
    	
    	
    	return result;
    }