Python链表传参报错:__init__参数不匹配,如何传入对象查看遍历结果?
问题分析与修正
你遇到的报错 LinkedList.__init__() takes 1 positional argument but 2 were given 原因很明确:你定义的LinkedList类的__init__方法只接受self这一个参数,但创建实例时却传入了列表n,导致参数数量不匹配。除此之外,代码还有两处隐藏问题需要修正:
Node类的__init__方法中ref参数没有默认值,创建节点时必须传该参数,使用起来很繁琐print_LL是实例方法,不需要额外传参,它可以直接通过self.head访问链表的头节点
下面是修正后的完整代码,同时添加了从列表批量构建链表的功能:
class Node: def __init__(self, data, ref=None): self.data = data self.ref = ref # 给ref设默认值None,创建节点时可只传数据 class LinkedList: def __init__(self): self.head = None # 添加从列表构建链表的方法 def build_from_list(self, data_list): if not data_list: return # 创建头节点 self.head = Node(data_list[0]) current_node = self.head # 遍历剩余元素,依次创建节点并链接 for data in data_list[1:]: current_node.ref = Node(data) current_node = current_node.ref def print_LL(self): if self.head is None: print("链表为空") else: current_node = self.head while current_node is not None: print(current_node.data) current_node = current_node.ref # 正确的调用方式 data_list = [10,20,30,40] ll = LinkedList() # 初始化时不传参数,符合__init__的定义 ll.build_from_list(data_list) # 调用方法传入列表构建链表 ll.print_LL() # 直接调用遍历方法,无需传参
关键修正点说明
Node类的__init__给ref设置默认值None,简化节点创建的操作- 新增
build_from_list方法专门处理列表转链表的逻辑,保持初始化方法的简洁性 - 创建
LinkedList实例时不再传参,避免参数不匹配的报错 - 调用
print_LL时无需传参,方法内部通过self.head即可访问链表结构
运行修正后的代码,就能正常遍历并输出链表的所有元素。
内容的提问来源于stack exchange,提问作者PROTTASHA
相关产品推荐
相关产品推荐

