Python实现LinkedList时addNode()方法报错int对象无next属性
问题根因
- 实例化
LinkedList时传入的参数是整数1,但构造函数未做类型适配,直接将int类型值赋值给self.head和self.tail。首次调用addNode()时,代码尝试访问int对象的next属性,直接抛出AttributeError: 'int' object has no attribute 'next'。 - 构造函数使用可变对象
ListNode()作为默认参数属于Python常见语法陷阱:默认参数在函数定义阶段就会完成初始化,所有未显式传入head参数的LinkedList实例会共享同一个头节点,后续操作会出现跨实例的数据污染。
修正代码
调整LinkedList构造逻辑,兼容传入数值初始化头节点的使用习惯,同时修复可变默认参数问题:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class LinkedList: def __init__(self, head_val=0): # 初始化时统一生成头节点,传入的参数作为头节点的存储值 self.head = ListNode(head_val) self.tail = self.head def addNode(self, val=0): newNode = ListNode(val) self.tail.next = newNode self.tail = newNode
验证结果
运行原测试代码:
l1 = LinkedList(1) l1.addNode(2) l1.addNode(4) # 遍历输出链表所有节点值 cur = l1.head while cur: print(cur.val) cur = cur.next
输出符合预期:
1 2 4
内容的提问来源于stack exchange,提问作者Jake Nguyen
相关产品推荐
相关产品推荐

