当前位置:首页 > 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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现目录

js实现目录

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js怎么实现异步

js怎么实现异步

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