当前位置:首页 > JavaScript

反转链表js实现

2026-02-02 20:47:27JavaScript

反转链表的 JavaScript 实现

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

反转链表js实现

迭代法

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

反转链表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;
}
  • 初始化指针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 的链接。

示例测试

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

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实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClip…

js实现换肤

js实现换肤

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