package leetcode;
public class demo_147 {
public ListNode insertionSortList(ListNode head) {
//最多有一个节点的链表直接返回
if(head==null||head.next==null) {
return head;
}
ListNode dummyNode=new ListNode();
dummyNode.next=head;
ListNode pre;
//lastNode为有序链表的最后一个元素
ListNode lastNode=head;
ListNode cur=lastNode.next;
while(cur!=null) {
//当前元素比有序链表所有值都大
if(lastNode.val<=cur.val) {
lastNode=lastNode.next;
}
else {
pre=dummyNode;
//找出当前元素在有序链表中应该插入位置的上一个元素
while(pre.next.val<cur.val) {
pre=pre.next;
}
//删除当前元素
lastNode.next=cur.next;
//在有序链表中插入当前元素
cur.next=pre.next;
pre.next=cur;
}
cur=lastNode.next;
}
return dummyNode.next;
}
}