非容器链表的插入排序,和数组不一样的是插入时指针要从前往后扫,而且注意的是除非没有插入操作,否则指针是不用前进的,因为把指针的next插入到了前面,所以又指向新的节点了。
public ListNode insertionSortList(ListNode head) {
if(head==null)return null;
ListNode start = new ListNode(0);
start.next=head;
ListNode p=head;
ListNode q;
ListNode tmp;
int cha=0;
while(p.next!=null){
tmp=p.next;
q=start;
cha=0;
while(q!=p){
if(q.next.val>=tmp.val){
p.next=tmp.next;
tmp.next=q.next;
q.next=tmp;
//p=p.next;
cha=1;
break;
}
q=q.next;
}
if(cha==0){
p=p.next;
}
}
return start.next;
}