【LeetCode-147】对链表进行插入排序
问题
对链表进行插入排序。
插入排序算法:
- 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表;
- 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入;
- 重复直到所有输入数据插入完为止。
解答
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode* dum = new ListNode(0);
while (head) {
ListNode* cur = dum; // 每次从虚拟头节点出发
while (cur->next && cur->next->val < head->val)
cur = cur->next; // 查找head值的插入位置
ListNode* tmp = head->next;
head->next = cur->next;
cur->next = head;
head = tmp;
}
return dum->next;
}
};