public static ListNode sortList(ListNode head) {
		ListNode head1, head2;
		if (head == null || head.next == null)
			return head;
		ListNode slow = head, fast = head;
		while (fast.next != null) {
			fast = fast.next;
			if (fast.next != null) {
				fast = fast.next;
				slow = slow.next;
			}
		}
		head1 = head;
		head2 = slow.next;
		slow.next = null;
		head1 = sortList(head1);
		head2 = sortList(head2);
		return merge(head1, head2);
	}