Python链表display函数无法访问next节点数据求助
问题分析与修复
你的display函数报错是因为循环逻辑导致最后一次访问了None的data属性。
错误原因
你的链表头节点self.head是一个空节点(data=None),display函数的循环逻辑存在顺序问题:
- 初始
cur_node = self.head - 先执行
cur_node = cur_node.next,再尝试添加data - 当循环到最后一个有效节点时,
cur_node.next是None,执行cur_node = cur_node.next后,cur_node变成None,此时调用cur_node.data就会触发AttributeError——因为None没有data属性。
修复后的display函数
有两种简单的修复方式:
方式一:从第一个有效节点开始遍历
直接跳过空的头节点,从self.head.next开始遍历:
def display(self): elements = [] cur_node = self.head.next # 从第一个带数据的节点开始 while cur_node is not None: elements.append(cur_node.data) cur_node = cur_node.next print(elements)
方式二:调整循环内的执行顺序
先判断cur_node.next是否存在,再移动节点并添加数据:
def display(self): elements = [] cur_node = self.head while cur_node.next is not None: cur_node = cur_node.next elements.append(cur_node.data) print(elements)
额外提示
你的lenght方法拼写错误,正确拼写是length,可以顺便修正。
修复后运行代码,调用li.display()会输出[5, 5],符合预期。
内容的提问来源于stack exchange,提问作者Faustino Da Silva
相关产品推荐
相关产品推荐

