仅可访问元素及后继节点时,如何反转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
相关产品推荐
相关产品推荐

