当前位置:首页 > 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实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…