描述:
给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。
示例 :
![](https://img-blog.csdnimg.cn/img_convert/a6f5accbf04aa12351fc40409f56635e.jpeg)
输入: head = [4,2,1,3]
输出: [1,2,3,4]
图片分析:
![](https://img-blog.csdnimg.cn/img_convert/78c930727d6a2be94f61a8bb22504f58.png)
代码分析:(Java为例)
class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null)return null;
ListNode sortHead = head,cur = head.next;
sortHead.next = null;
while(cur!=null)
{
ListNode curNext = cur.next;
//头插
if(cur.val <sortHead.val)
{
cur.next = sortHead;
sortHead = cur;
}
else
{
ListNode sortPrev = sortHead,sortCur = sortHead.next;
//中间插
while(sortCur!=null)
{
if(sortCur.val >= cur.val)
{
cur.next = sortCur;
sortPrev.next = cur;
break;
}
sortPrev = sortCur;
sortCur = sortCur.next;
}
//尾插,这里要注意如果是上面循环break出来的,这里要进行一次判断
if(sortCur == null)
{
sortPrev.next = cur;
cur.next = null;
}
}
cur = curNext;
}
return sortHead;
}
}