Python实现链表search方法遍历时出现AttributeError是什么原因?
错误原因分析
- 等值比较逻辑错误:
search方法的循环条件写为while node != value,这里node是Node类的实例对象,你传入的搜索参数是整数类型的value,两种完全不同类型的对象做判等操作永远返回True,循环会一直执行,直到node遍历到链表末尾的None值,此时尝试访问None.next就触发了AttributeError。 - 缺少空节点前置判断:
to_list方法的循环条件是while node,会先判断当前节点是否为None再执行后续操作,而search方法的循环没有做空节点校验,就算后续修正了比较逻辑,如果要搜索的值不存在于链表中,还是会遍历到None触发同类报错。
修复后的search方法实现
def search(self, value): """ Search the linked list for a node with the requested value and return the node. """ node = self.head # 先校验节点非空,再对比节点存储的数值 while node: if node.value == value: return node node = node.next # 未匹配到对应节点时返回None,可根据业务需求调整为抛出指定异常 return None
内容的提问来源于stack exchange,提问作者Gary Kong
相关产品推荐
相关产品推荐

