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

Python链表反转函数异常:遍历出现无限循环问题求助

链表反转函数的问题分析与修复

问题根源

你的代码在循环中犯了一个关键错误:修改当前节点的next指针前,没有提前保存下一个节点的引用。

原循环逻辑中,当执行head = nxt后,立刻把head.next设为prev,这时候nxt(也就是当前的head)的next已经被改成了前一个节点。接下来执行nxt = nxt.next时,拿到的不是原链表中的下一个节点,而是刚刚设置的prev(也就是上一轮的head),这就导致0和1两个节点形成了互相指向的环,遍历的时候会无限循环打印这两个值。

修复后的代码

正确的做法是,在修改指针前,先把nxt的下一个节点保存起来,避免引用丢失:

def reverse(head):
    prev = None
    current = head
    while current:
        # 先保存下一个节点,防止修改指针后丢失引用
        nxt = current.next
        # 反转当前节点的指针
        current.next = prev
        # 移动prev和current指针到下一组位置
        prev = current
        current = nxt
    # 循环结束后prev就是反转后的新头节点
    return prev

逻辑说明

  1. 初始化prev为None(反转后的链表尾节点指向空),current指向原链表头节点。
  2. 每次循环中:
    • 先保存current的下一个节点到nxt,这是避免指针丢失的核心步骤。
    • 把current.next指向prev,完成当前节点的反转指向。
    • 将prev和current分别向后移动一位,准备处理下一个节点。
  3. 当current为None时,循环结束,此时prev就是反转后的链表头节点。

测试验证

用你的遍历函数测试0->1->2->3->4->5的链表,修复后的代码会依次输出5 4 3 2 1 0,不会出现无限循环问题。

内容的提问来源于stack exchange,提问作者shadow_integration

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:54:21