private ListNode merge(ListNode leftHead, ListNode rightHead) {
		ListNode head = null;
		ListNode tail = head;
		while (leftHead != null && rightHead != null) {
			if (leftHead.val <= rightHead.val) {
				if (head == null) {
					head = leftHead;
					tail = leftHead;
					leftHead = leftHead.next;
					tail.next = null;
				} else {
					tail.next = leftHead;
					tail = leftHead;
					leftHead = leftHead.next;
					tail.next = null;
				}
			} else {
				if (head == null) {
					head = rightHead;
					tail = rightHead;
					rightHead = rightHead.next;
					tail.next = null;
				} else {
					tail.next = rightHead;
					tail = rightHead;
					rightHead = rightHead.next;
					tail.next = null;
				}
			}
		}
		while (leftHead != null) {
			if (head == null) {
				head = leftHead;
				tail = leftHead;
				leftHead = leftHead.next;
				tail.next = null;
			} else {
				tail.next = leftHead;
				tail = leftHead;
				leftHead = leftHead.next;
				tail.next = null;
			}
		}
		while (rightHead != null) {
			if (head == null) {
				head = rightHead;
				tail = rightHead;
				rightHead = rightHead.next;
				tail.next = null;
			} else {
				tail.next = rightHead;
				tail = rightHead;
				rightHead = rightHead.next;
				tail.next = null;
			}
		}
		return head;
	}