2026-10-29 17:54:43
链表反转是数据结构中的经典问题,可通过迭代和递归两种方法实现。以下是对这两种方法的详细解析:
迭代法迭代法通过逐个反转链表节点间的指针方向来实现反转,通常需要三个指针来确保操作过程中链表不断裂。
初始化 prev 为 null,curr 为头节点。
遍历链表,保存 curr 的下一个节点 next。
将 curr.next 指向 prev,完成局部反转。
移动 prev 和 curr 指针继续处理后续节点。
最终 prev 成为新链表的头节点。

递归法通过函数调用栈隐式保存节点信息,从链表尾部开始反转指针方向。
递归终止条件:当前节点为空或下一节点为空,返回当前节点。
递归调用反转后续链表,得到反转后的头节点 newHead。
将当前节点的下一节点指向当前节点(即 head.next.next = head)。
断开当前节点的原指向(head.next = null),避免循环。
返回 newHead 作为新链表的头节点。

优点:空间复杂度低(O(1)),适合大规模数据。
缺点:需显式管理多个指针,代码稍复杂。
优点:代码简洁,逻辑直观。
缺点:空间复杂度高(O(n)),可能栈溢出。
链表反转的迭代与递归方法各有优劣。迭代法通过三个指针显式控制反转过程,适合处理长链表;递归法则利用函数调用栈简化代码,但需注意栈空间限制。理解两种方法的原理及适用场景,有助于灵活解决类似链表操作问题。