我收到一个丢失的位置参数错误。(python 中的链表)

I am getting a missing positional argument error.(linked list in python)

代码:

class node:
    def __init__(self,data):
        self.data=data
        self.next=None

class linkedlist:
    def __init__(self):
        self.head=None

def printlist(self):
    temp=self.head
    while(temp):
        print(temp.data,end=" ")
        temp=temp.next

def insert_at_start(self,new_data):
    new_node=node(new_data)
    if self.head==None:
        new_node=self.head
    else:
        new_node.next=self.head
        self.head=new_node

l1=linkedlist()
insert_at_start(1)
insert_at_start(5)
insert_at_start(1)
insert_at_start(7)
insert_at_start(5)

l1.printlist()

错误: 追溯(最近一次通话): 文件 "linkedlist.py",第 65 行,位于 insert_at_start(1) 类型错误:insert_at_start() 缺少 1 个必需的位置参数:'new_data'

你有一个缩进问题:insert_at_start 不是 linkedlist class 的方法,因为它是在 class 范围之外定义的,这就是为什么它需要 2参数。

试试这个:

class linkedlist:
    def __init__(self):
        self.head=None

    def printlist(self):
        temp=self.head
        while(temp):
            print(temp.data,end=" ")
            temp=temp.next

    def insert_at_start(self,new_data):
        new_node=node(new_data)
        if self.head==None:
            new_node=self.head
        else:
            new_node.next=self.head
            self.head=new_node

l1=linkedlist()
l1.insert_at_start(1)
l1.insert_at_start(5)
l1.insert_at_start(1)
l1.insert_at_start(7)
l1.insert_at_start(5)
l1.printlist()

首先你有缩进问题,这两个函数(printlistinsert_at_start)应该是方法,所以将它们缩进到 linkedlist class 中。还有两个错误:一个是,你需要调用

l1.insert_at_start(..)

即实例上的方法调用。另一个是存在于以下行中的逻辑错误:

if self.head == None:
    new_node = self.head

.head还不存在的时候,你不觉得.head应该分配给new_node吗?

另请注意,l1 可能是有史以来最容易混淆的变量名之一,请更改它;和 PascalCase 你的 class 个名字。