【LeetCode-147】对链表进行插入排序

问题

对链表进行插入排序。

插入排序算法:

  1. 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表;
  2. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入;
  3. 重复直到所有输入数据插入完为止。

解答

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;
    }
};
posted @ 2021-03-27 13:10  tmpUser  阅读(32)  评论(0编辑  收藏  举报