当前位置:首页 > JavaScript

js实现反向链表

2026-04-07 07:55:15JavaScript

反转链表的实现方法

反转链表是常见的算法问题,可以通过迭代或递归两种方式实现。以下是JavaScript中的具体实现代码。

迭代法实现

迭代法通过遍历链表并逐个反转节点间的指针来实现反转。时间复杂度为O(n),空间复杂度为O(1)。

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;
}

该方法使用三个指针:prevcurrentnextTemp。每次迭代将current节点的next指针指向prev,然后移动指针继续处理下一个节点。

js实现反向链表

递归法实现

递归法通过递归调用反转剩余的链表,再将当前节点连接到已反转的部分。时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。

function reverseList(head) {
    if (head === null || head.next === null) {
        return head;
    }

    const reversedList = reverseList(head.next);
    head.next.next = head;
    head.next = null;

    return reversedList;
}

递归终止条件是链表为空或只有一个节点。递归过程先将后续链表反转,再将当前节点连接到反转后的链表末尾。

js实现反向链表

使用示例

假设有以下链表节点定义:

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

创建链表并测试反转函数:

const node1 = new ListNode(1);
const node2 = new ListNode(2);
const node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;

const reversed = reverseList(node1);
console.log(reversed); // 输出反转后的链表

注意事项

  1. 迭代法适用于所有情况,且空间效率更高。
  2. 递归法代码更简洁,但可能因递归深度过大导致栈溢出。
  3. 处理链表时需注意边界条件(如空链表或单节点链表)。

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

相关文章

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

节流js实现

节流js实现

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

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…