Leetcode147.链表插入排序
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==NULL || head->next==NULL)return head;
ListNode* dummpyHead = new ListNode(-1);
dummpyHead->next = head;
ListNode* cur = head->next;
ListNode* pre = head;
while(cur != NULL)
{
if(cur->val>=pre->val)
{
pre = cur;
cur = cur->next;
}
else
{
pre->next = cur->next;
cur->next = NULL;
ListNode* tmp = dummpyHead;
while(tmp->next->val<=cur->val)
{
tmp = tmp->next;
}
cur->next = tmp->next;
tmp->next = cur;
cur = pre->next;
}
}
return dummpyHead->next;
}
};