public static void reorderList(ListNode head) {
		int len = 0;
		ListNode node = head;
		if (null == node) return; 
		while (null != node) {
			len = len + 1;
			node = node.next;
		}
		
		node = head;
		int i = 0;
		while (i < len / 2) {
			node = node.next;
			i = i + 1;
		}
		ListNode tmp = node.next;
		node.next = null;
		ListNode fistpart = head;
		ListNode secondpart = tmp;
		
		tmp = secondpart;
		ListNode p = null;
		while (null != tmp) {
			ListNode q = tmp;
			tmp = tmp.next;
			q.next = p;
			p = q;
		}
		secondpart = p;
		
		ListNode fp = fistpart;
		ListNode sp = secondpart;
		ListNode rp = fp;
		while (null != fp && null != sp) {
			ListNode tfp = fp;
			ListNode tsp = sp;
			fp = fp.next;
			sp = sp.next;
			tfp.next = tsp;
			tsp.next = fp;
		}
		head = rp;
    }