public static ListNode insertionSortList(ListNode head) {
		if (null == head || null == head.next) return head;
		ListNode p = head.next; 
		head.next = null;
		ListNode r = head, rp = r, fp = null;
		while (null != p) {
			rp = r;
			fp = null;
			while (null != rp) {
				if (p.val < rp.val) {
					break;
				}
				fp = rp;
				rp = rp.next;
			}
			ListNode q = p;
			p = p.next;
			q.next = rp;
			if (null != fp) fp.next = q;
			else {r = q;}
		}
        return r;
    }