You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅可访问元素及后继节点时,如何反转LinkedList链表?

链表反转方法的正确实现(针对给定LinkedList结构)

现有代码问题分析

你当前的reverse方法逻辑完全错误——它只是将链表末尾的元素值逐个覆盖到first节点,并没有修改节点之间的引用关系,根本没有实现链表反转的效果。

符合要求的正确实现

根据限制条件(仅重新关联first属性,不使用辅助数据结构),我们可以通过调整节点的next指针来完成反转,使用经典的三指针法:

public void reverse() {
    // 空链表或只有一个节点时无需反转
    if (first == null || first.next == null) {
        return;
    }

    Node<T> prev = null;
    Node<T> current = first;
    Node<T> next;

    while (current != null) {
        // 保存当前节点的下一个节点,避免指针丢失
        next = current.next;
        // 将当前节点的next指向前一个节点,完成指针反转
        current.next = prev;
        // 前指针向后移动
        prev = current;
        // 当前指针向后移动
        current = next;
    }

    // 反转后,原尾节点成为新的首节点,更新first属性
    first = prev;
}

代码说明

  • 先处理边界场景:空链表或仅含单个节点时直接返回,无需额外操作。
  • 用prev记录当前节点的前序节点,初始值为null(对应反转后原首节点的next指向)。
  • 遍历过程中,每次先保存当前节点的下一个节点,再修改当前节点的next指向完成局部反转,最后移动指针继续遍历。
  • 遍历结束后,prev指向原链表的尾节点,将first指向它,完成整个链表的反转。

内容的提问来源于stack exchange,提问作者Javier Montes Pérez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:45:49