对链表进行插入排序。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
思路:
1.将链表分成已排序的链表和未排序的链表两部分,切记要把两部分切断。
2. 每次将未排序链表的第一个节点拎出来,插入已排序链表的合适位置。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* head2= head->next;
head->next=NULL;
while(head2)
{
ListNode* cur=head2;
head2 = head2->next;
ListNode* pre=dummy;
ListNode* travel=pre->next;
for (; travel&&travel->val<=cur->val; pre=travel, travel=travel->next);
pre->next=cur;
cur->next=travel;
}
head= dummy->next;
delete dummy;
dummy=NULL;
return head;
}
};
来源:CSDN
作者:曼巴精神程序员
链接:https://blog.csdn.net/qq_35692267/article/details/103830758