下图是对 4-15-9-1插入排序的举例
当if(p.val<=p.next.val){
p=p.next;} 当不满足条件时 q=p.next p.next=q.next
这时候,需要把q节点放到p节点之前的合适位置,即
while(r.next.val<=q.val){
r=r.next;
}
当条件满足时 r后移,当不满足时表示,找到比q节点大的数,那么需要把q节点放入r.next之前
q.next=r.next;
r.next=q;
具体代码如下:
public ListNode insertionSortList(ListNode head) { if(head == null || head.next== null){ return head; } ListNode head1 = new ListNode(0); head1.next=head; ListNode p = head; ListNode q; ListNode r; while(p != null && p.next != null){ if(p.val<=p.next.val){ p=p.next; }else{ q=p.next; p.next=q.next; r=head1; while(r.next.val<=q.val){ r=r.next; } q.next=r.next; r.next=q; } } return head1.next; }