public ListNode insertionSortList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode preHead = new ListNode(0);
        preHead.next = head;
        ListNode run = head;
        
        while(run != null && run.next != null){
        	if(run.val > run.next.val){
                ListNode smallNode = run.next;
                ListNode pre = preHead;
                while(pre.next.val < smallNode.val)
                    pre = pre.next;
                ListNode tmp = pre.next;
                pre.next = smallNode;
                run.next = smallNode.next;
                smallNode.next = tmp;
            }
            else{
                run = run.next;
            }
        }
        return preHead.next;
    }