当前位置:首页 > JavaScript

js实现反向链表

2026-03-15 14:32:14JavaScript

实现反向链表的方法

迭代法

迭代法是最常见且高效的反转链表方法,通过遍历链表并逐个反转节点指针实现。

js实现反向链表

function reverseList(head) {
    let prev = null;
    let current = head;
    while (current !== null) {
        const nextTemp = current.next;
        current.next = prev;
        prev = current;
        current = nextTemp;
    }
    return prev;
}
  • prev 用于保存前一个节点,初始化为 null
  • current 指向当前节点,初始化为链表头 head
  • 在循环中,临时保存 current.next,将 current.next 指向 prev,然后更新 prevcurrent 为下一个节点。
  • 最终返回 prev,即新的链表头。

递归法

递归法通过递归调用反转子链表,再将当前节点连接到反转后的子链表尾部。

js实现反向链表

function reverseList(head) {
    if (head === null || head.next === null) {
        return head;
    }
    const newHead = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
}
  • 基线条件:链表为空或只有一个节点时直接返回。
  • 递归反转 head.next 开始的子链表,返回新的头节点 newHead
  • 将当前节点 head 连接到反转后的子链表尾部(head.next.next = head),并断开原链接(head.next = null)。
  • 返回 newHead 作为最终结果。

使用栈结构

利用栈的先进后出特性反转链表,适合非原地修改的场景。

function reverseList(head) {
    if (head === null) return null;
    const stack = [];
    let current = head;
    while (current !== null) {
        stack.push(current);
        current = current.next;
    }
    const newHead = stack.pop();
    current = newHead;
    while (stack.length > 0) {
        current.next = stack.pop();
        current = current.next;
    }
    current.next = null;
    return newHead;
}
  • 遍历链表并将所有节点压入栈中。
  • 弹出栈顶节点作为新链表的头 newHead
  • 依次弹出节点并链接,最后将尾节点的 next 置为 null

注意事项

  • 迭代法空间复杂度为 O(1),递归法为 O(n)(栈空间)。
  • 递归法可能因链表过长导致栈溢出。
  • 实际应用中迭代法更常用,递归法代码更简洁。

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

相关文章

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现dh

js实现dh

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

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…