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

链表实现队列的递归反转问题排查

问题分析与解决

你的递归反转队列函数存在两个关键错误,导致反转逻辑完全未执行:

1. 递归终止条件判断错误

原函数中的if not queue:是判断队列对象本身是否为None,但你传入的q是有效的Queue_LL实例,这个条件永远不会成立,递归代码块根本不会被触发,队列自然没有任何变化。

正确的终止条件应该是判断队列是否为空,调用队列的isEmpty()方法:if queue.isEmpty(): return

2. 递归逻辑执行顺序错误

原代码把弹出、递归、入队的逻辑写在了错误的分支里,完全搞反了逻辑。正确逻辑是:当队列不为空时,先弹出队首元素,递归反转剩余队列,再将弹出的元素入队到反转后的队列尾部。

修正后的递归函数

def reverse(queue):
    # 终止条件:队列为空时直接返回
    if queue.isEmpty():
        return
    # 弹出当前队首元素
    temp = queue.dequeue()
    # 递归反转剩余的队列
    reverse(queue)
    # 将弹出的元素加入反转后的队列尾部
    queue.enqueue(temp)

验证结果

运行修正后的代码,反转后的队列输出将符合你的预期:

  • q.getFront() 返回50(原队尾元素)
  • q.getRear() 返回20(原队首元素)
  • q.size() 返回4(元素数量保持不变)
  • q.isEmpty() 返回False(队列非空)

递归执行过程说明

以测试队列[20,30,40,50]为例:

  1. 第一次调用reverse(q):弹出20,递归处理剩余队列[30,40,50]
  2. 第二次调用reverse(q):弹出30,递归处理剩余队列[40,50]
  3. 第三次调用reverse(q):弹出40,递归处理剩余队列[50]
  4. 第四次调用reverse(q):弹出50,递归处理空队列,触发终止条件返回
  5. 第四次调用结束,将50入队,队列变为[50]
  6. 第三次调用结束,将40入队,队列变为[50,40]
  7. 第二次调用结束,将30入队,队列变为[50,40,30]
  8. 第一次调用结束,将20入队,队列变为[50,40,30,20],完成反转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:43:13