题目:对链表进行插入排序
不知道什么是插入排序的小伙伴,可以看看我写的另一篇很简单的介绍:插入排序
相信你已经知道什么是插入排序了,那这题就直接按着插入排序的想法写就好了。
将原链表分为一个已排序的链表,一个未排序的链表,将未排序链表中的节点逐一插入已排序的链表中。
AC Code
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;//少于两个数
ListNode * end = head;
ListNode * now = head->next;
end->next = NULL;
while(now){
ListNode * temp = now;
now = now->next;
if(temp->val >= end->val) {
//比有序链表的尾节点大,直接插到最后
end->next = temp ;
end = temp;
end->next=NULL;
continue;
}
ListNode * l = head;
ListNode * pre=NULL;
while(l){
//找到一个适当的位置插入
if(temp->val <= l->val){
temp->next = l;
if(pre) pre->next=temp;
else head = temp;
break;
}
pre = l;
l = l->next;
}
}
return head;
}
};
PS:希望对你有帮助!