当前位置:首页 > JavaScript

反转链表js实现

2026-04-07 14:33:29JavaScript

反转链表的 JavaScript 实现

反转链表是算法中的常见问题,以下是两种常用的实现方法:迭代法和递归法。

反转链表js实现

迭代法

迭代法通过遍历链表,逐个反转节点的指向来实现反转。

反转链表js实现

function reverseList(head) {
    let prev = null;
    let current = head;
    while (current !== null) {
        const next = current.next;
        current.next = prev;
        prev = current;
        current = next;
    }
    return prev;
}
  • 初始化 prevnullcurrent 为链表头节点 head
  • 遍历链表,保存当前节点的下一个节点 next
  • 将当前节点的 next 指向 prev,完成反转。
  • 移动 prevcurrent 指针,继续处理下一个节点。
  • 最终 prev 指向反转后的链表头节点。

递归法

递归法通过递归调用反转子链表,再处理当前节点。

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;
}
  • 递归终止条件:当前节点为 null 或下一个节点为 null,直接返回当前节点。
  • 递归反转子链表,得到新的头节点 newHead
  • 将当前节点的下一个节点的 next 指向当前节点,完成反转。
  • 将当前节点的 next 置为 null,避免循环引用。
  • 返回新的头节点 newHead

示例用法

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

// 创建链表 1 -> 2 -> 3 -> 4 -> 5
const head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));

// 反转链表
const reversedHead = reverseList(head);

// 输出反转后的链表
let current = reversedHead;
while (current !== null) {
    console.log(current.val);
    current = current.next;
}
// 输出: 5 4 3 2 1

两种方法均能有效反转链表,迭代法空间复杂度为 O(1),递归法空间复杂度为 O(n)。根据实际需求选择合适的方法。

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

相关文章

jquery.js

jquery.js

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

js jquery

js jquery

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

js实现驼峰

js实现驼峰

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

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…