对链表进行插入排序(中等)
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
struct ListNode
{
int val;
ListNode *next;
ListNode(int x): val(x), next(nullptr) {}
};
class Solution
{
public:
ListNode* insertionSortList(ListNode *head)
{
if(!head || !head->next)
return head;
ListNode *dummyHead = new ListNode(-1);
dummyHead->next = head;
ListNode *prev = head;
ListNode *node = head->next;
while(node)
{
if(node->val < prev->val)
{
ListNode *temp = dummyHead;
while(temp->next->val < node->val)
temp = temp->next;
prev->next = node->next;
node->next = temp->next;
temp->next = node;
node = prev->next;
}
else
{
prev = prev->next;
node = node->next;
}
}
ListNode *ret = dummyHead->next;
delete dummyHead;
return ret;
}
};