当前位置:首页 > JavaScript

反转链表js实现

2026-02-02 20:47:27JavaScript

反转链表的 JavaScript 实现

反转链表是常见的算法问题,可以通过迭代或递归两种方式实现。以下是两种方法的详细实现和解释。

迭代法

迭代法通过遍历链表并逐个反转节点指针实现反转。需要维护三个指针:prevcurrentnext

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;
}
  • 初始化指针prev 初始化为 nullcurrent 初始化为链表头 head
  • 遍历链表:每次迭代保存 current.nextnext,将 current.next 指向 prev,然后移动 prevcurrent
  • 返回新头节点:最终 prev 成为反转后的链表头。

递归法

递归法通过递归调用反转子链表,并调整指针方向。

function reverseListRecursive(head) {
    if (head === null || head.next === null) {
        return head;
    }
    const newHead = reverseListRecursive(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
}
  • 基线条件:如果链表为空或只有一个节点,直接返回 head
  • 递归反转:递归调用反转 head.next 后的链表,得到新头节点 newHead
  • 调整指针:将 head.next.next 指向 head,断开原 head.next 的链接。

示例测试

测试反转链表函数,确保其正确性。

反转链表js实现

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);
console.log(reversedHead); // 输出反转后的链表头

复杂度分析

  • 时间复杂度:两种方法均为 O(n),需遍历链表所有节点。
  • 空间复杂度:迭代法为 O(1),递归法为 O(n)(递归栈空间)。

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

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现tab选项卡切换

js实现tab选项卡切换

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

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现正交

js实现正交

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