题目:
每次只选择一个元素,将其放到合适的位置,直到所有元素可以形成一个有序的输出列表。
解:
直接从头开始比较值,然后插入,也就是插入排序的变异版。
主要得注意链表头插入,其余的没什么了。当然了,也可以直接先断链表,然后再排序,也省得要在不同情况下断链。
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null || head.next==null){
return head;
}
ListNode h=head.next,pre=head,t;
boolean fg;
while(h!=null){
t=head;
fg=false;
//链表头插入
if(t.val>h.val){
pre.next=h.next;
h.next=t;
head=h;
h=pre.next;
continue;
}
//链表中间插入
while(t.next!=h){
if(t.next.val>h.val){
pre.next=h.next;
h.next=t.next;
t.next=h;
h=pre.next;
fg=true;
break;
}
t=t.next;
}
//原位置
if(!fg){
h=h.next;
pre=pre.next;
}
}
return head;
}
}