public ListNode sortList(ListNode head) {
	      if(head == null || head.next == null)
	    	  return head;
	      
	      //get the length of the liklist
	      int count = 0;
	      ListNode node = head;
	      while(node!=null){
	    	  count++;
	    	  node = node.next;
	      }
	      
	      
	      //break up to two list
	      int middle = count / 2;
	      
	      ListNode middleNode = head, rightlisthead = null;
	      int countHalf = 1;
	      while(countHalf < middle){
	    	  countHalf++;
	    	  middleNode = middleNode.next;
	      }
	      rightlisthead = middleNode.next;
	      middleNode.next = null;
		 
	      //recursively break until it can not break
	      ListNode left = sortList(head);
	      ListNode right = sortList(rightlisthead);
	      
	      //combine and return the head of new sorted linkList
	      return merge(left,right);
	    }