当前位置:首页 > JavaScript

js实现无序链表排序

2026-03-01 16:57:20JavaScript

无序链表排序的实现方法

在JavaScript中实现无序链表的排序,可以采用多种排序算法。以下介绍两种常见方法:归并排序和插入排序。

归并排序实现

归并排序适合链表的排序,时间复杂度为O(n log n),空间复杂度为O(1)。

class ListNode {
  constructor(val, next = null) {
    this.val = val;
    this.next = next;
  }
}

function sortList(head) {
  if (!head || !head.next) return head;

  let slow = head;
  let fast = head.next;

  while (fast && fast.next) {
    slow = slow.next;
    fast = fast.next.next;
  }

  const mid = slow.next;
  slow.next = null;

  const left = sortList(head);
  const right = sortList(mid);

  return merge(left, right);
}

function merge(l1, l2) {
  const dummy = new ListNode(0);
  let curr = dummy;

  while (l1 && l2) {
    if (l1.val < l2.val) {
      curr.next = l1;
      l1 = l1.next;
    } else {
      curr.next = l2;
      l2 = l2.next;
    }
    curr = curr.next;
  }

  curr.next = l1 || l2;

  return dummy.next;
}

插入排序实现

插入排序实现简单,但时间复杂度为O(n²),适合小规模数据。

js实现无序链表排序

function insertionSortList(head) {
  const dummy = new ListNode(0);
  let curr = head;

  while (curr) {
    const next = curr.next;
    let prev = dummy;

    while (prev.next && prev.next.val < curr.val) {
      prev = prev.next;
    }

    curr.next = prev.next;
    prev.next = curr;
    curr = next;
  }

  return dummy.next;
}

使用示例

// 创建链表: 4->2->1->3
const head = new ListNode(4, new ListNode(2, new ListNode(1, new ListNode(3))));

// 使用归并排序
const sortedHead = sortList(head);

// 使用插入排序
// const sortedHead = insertionSortList(head);

// 打印排序结果
let current = sortedHead;
while (current) {
  console.log(current.val);
  current = current.next;
}

算法选择建议

对于大规模链表数据,推荐使用归并排序,因其效率更高。对于小规模数据或几乎有序的链表,插入排序可能更简单高效。实际应用中可根据具体场景选择合适的算法。

标签: 链表js
分享给朋友:

相关文章

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…