class Solution {
public ListNode insertionSortList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode dummynode=new ListNode(0);
dummynode.next=head;
ListNode lastsorted=head;
ListNode cur=head.next;
//对cur进行插入排序
while(cur!=null){
//如果不需要进行排序,直接更新lastsorted和cur
if(lastsorted.val<=cur.val){
//两个指针都更新
lastsorted=cur;
cur=lastsorted.next;
}
// 需要插入排序,1、找到需要插入的位置2、改变两个位置的指针(后,前)3、更新位置
else{
ListNode pre=dummynode;
while(pre.next.val<=cur.val){
pre=pre.next;
}
lastsorted.next=cur.next;
cur.next=pre.next;
pre.next=cur;
//只更新cur指针,因为lastsorted没有变化
cur=lastsorted.next;
}
}
return dummynode.next;
}
}