Python 3.11中Linked List的__str__方法报错问题求助
问题解决:链表__str__方法报错修复
核心问题分析
Python中__str__方法的强制要求是必须返回字符串类型,你的原实现和两次修改都违反了这个规则:
- 原方法无return语句,默认返回
None,触发TypeError; - 修改1返回循环结束后的
node(此时为None),仍非字符串; - 修改2循环结束后
node已变为None,访问node.data触发AttributeError。
正确的__str__实现
遍历链表收集所有节点数据,拼接成可读性强的字符串返回:
def __str__(self): nodes = [] current = self.head while current: # 把数据转成字符串,兼容非字符串类型的节点数据 nodes.append(str(current.data)) current = current.next # 用箭头连接节点,清晰展示链表结构 return " -> ".join(nodes)
测试时执行print(a_list),会输出类似Tuesday -> Wednesday的结果,符合预期。
额外代码优化提示(非核心问题,但影响功能正确性)
- search方法:原代码
while current.next会漏掉最后一个节点,应改为while current:
def search(self, target): current = self.head while current: # 修改此处 if current.data == target: return True current = current.next return False
- remove方法:原代码判断头节点时逻辑错误(比较节点对象和目标数据),且找到目标后未终止循环:
def remove(self, target): # 修正头节点判断逻辑 if self.head and self.head.data == target: self.head = self.head.next return current = self.head previous = None while current: if current.data == target: previous.next = current.next return # 找到后立即终止循环 previous = current current = current.next
内容的提问来源于stack exchange,提问作者Elnur
相关产品推荐
相关产品推荐

