Python链表转换函数报错:'tuple'对象无'first'属性求助
问题分析与解决
错误根源
你碰到的tuple就是Link.empty——看Link类的定义,empty = (),这是个空元组。当递归处理到链表最后一个节点时,link.rest会变成Link.empty,此时你的代码还试图访问link.first,但元组根本没有first属性,所以触发了AttributeError。
核心问题是终止条件判断错误:你判断的是link.first is Link.empty,但正确逻辑应该先检查当前的link本身是不是Link.empty。
修复后的代码
def convert_link(link): """Takes a linked list and returns a Python list with the same elements. >>> link = Link(1, Link(2, Link(3, Link(4)))) >>> convert_link(link) [1, 2, 3, 4] >>> convert_link(Link.empty) [] """ if link is Link.empty: return [] return [link.first] + convert_link(link.rest)
说明
- 修正终止条件:当
link等于Link.empty(空元组)时,直接返回空列表,避免去访问不存在的first属性。 - 递归逻辑保留:每次提取当前节点的
first元素,再递归处理后续的rest部分,把结果拼接成完整列表。
这样修改后,既能正确处理普通链表,也能应对空链表的边界情况。
内容的提问来源于stack exchange,提问作者Yiting
相关产品推荐
相关产品推荐

