You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:50:12