public void reorderList(ListNode head) {
		if (head == null || head.next == null) {
			return;
		}
		ListNode tail = head.next;
		ListNode mid = head;
		while (tail != null && tail.next != null) {
			mid = mid.next;
			tail = tail.next.next;
		}
		tail = mid.next;
		mid.next = null; // split list to two parts
		tail = reverse(tail); // now 123 to 321
		ListNode l = head.next;
		ListNode r = tail;

		while (l != null && r != null) {
			ListNode lNext = l.next;
			ListNode rNext = r.next;
			head.next = r;
			head = head.next;
			head.next = l;
			head = head.next;
			l = lNext;
			r = rNext;
		}

		if (r != null) {
			head.next = r;
		} else {
			head.next = l;
		}
	}