递归生成器异常:反向遍历链表迭代器仅返回首个元素
问题分析与修复
哦,我一眼就发现问题所在啦!你的递归生成器差了关键的一步——你调用了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
相关产品推荐
相关产品推荐

