当前位置:首页 > 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实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现类

js实现类

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