147. 对链表进行插入排序

链表

解题思路

复杂度

  1. 时间复杂度:O(n^2),其中 n 是链表的长度;

  2. 空间复杂度:O(1)

代码实现

var insertionSortList = function (head) {
    if (!head) return head;

    // 1. 定义一个排序链表
    let dummyHead = new ListNode(0, null);
    let cur = head;
    let pre = dummyHead;

    while (cur) {
        // 2. 找到 cur 在排序链表中的位置,后面进行插入操作
        while (pre.next && pre.next.val < cur.val) {
            pre = pre.next;
        }

        // 3. 将 head 插入到排序链表中
        let next = cur.next;    // 步骤一:保存 cur.next
        cur.next = pre.next;    // 步骤二
        pre.next = cur;         // 步骤三
        pre = dummyHead;        // 步骤四:pre 重新指向虚拟头结点来找下一个插入位置
        cur = next;             // 步骤五:cur 的前一个节点的下一个节点指向保存的 next
    }
    return dummyHead.next;
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 链表
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现