当前位置:首页 > 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²),适合小规模数据。

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实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https:/…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…