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
逻辑说明
- 初始化
prev为None(反转后的链表尾节点指向空),current指向原链表头节点。 - 每次循环中:
- 先保存
current的下一个节点到nxt,这是避免指针丢失的核心步骤。 - 把
current.next指向prev,完成当前节点的反转指向。 - 将
prev和current分别向后移动一位,准备处理下一个节点。
- 先保存
- 当
current为None时,循环结束,此时prev就是反转后的链表头节点。
测试验证
用你的遍历函数测试0->1->2->3->4->5的链表,修复后的代码会依次输出5 4 3 2 1 0,不会出现无限循环问题。
内容的提问来源于stack exchange,提问作者shadow_integration
相关产品推荐
相关产品推荐

