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

递归生成器异常:反向遍历链表迭代器仅返回首个元素

问题分析与修复

哦,我一眼就发现问题所在啦!你的递归生成器差了关键的一步——你调用了foo(head.next)但没有把它生成的结果传递出来,所以只有最上层的A被yield出来了。

问题根源

当你在else分支里执行foo(head.next)时,这个调用会返回一个生成器对象,但你没有去迭代它、把它的输出传递到当前生成器中。所以递归层级里的C和B根本没被输出,只有最后执行的yield head.data(也就是A)被返回了。

修复后的代码

要让递归生成器的所有结果都传递出来,你需要使用yield from语法,它会把子生成器的所有值逐个yield到当前生成器中:

class Node: 
    def __init__(self, data, next=None): 
        self.data = data 
        self.next = next 
def foo(head): 
    if head.next is None: 
        yield head.data 
    else: 
        yield from foo(head.next)  # 这里用yield from替代直接调用
        yield head.data 

测试验证

运行你的测试代码:

head = Node('A', Node("B", Node("C"))) 
for x in foo(head): 
    print(x) 

会得到符合反向需求的输出:

C
B
A

这正好实现了你“从最后一个Node到头节点”返回链表数据的目标~

内容的提问来源于stack exchange,提问作者Dor.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:34:27