public ListNode sortList(ListNode head) {
		if (head == null || head.next == null)      //list size == 0 or == 1
			return head;
		ListNode fast = head.next.next;
		ListNode slow = head;
		while (fast != null && fast.next != null) {
			slow = slow.next;
			fast = fast.next.next;
		}
		ListNode rightStart = sortList(slow.next);
		slow.next = null;
		return merge(sortList(head), rightStart);
	}