当前位置: 首页 > 知识库问答 >
问题:

TypeError:__init__()接受2个位置参数,但给出了3个//链表[重复]

袁宜
2023-03-14

函数insert接受对链表中第一个节点的引用、新值和位置,并在列表中的给定位置插入具有给定值的新节点。

函数pop to引用链表中的第一个节点和一个位置,并删除链表中该位置的节点。

函数stringify_linked_list引用链表的第一个节点并返回链表中所有节点的可打印字符串。

assert repr(Node(-1, None)) == '<Node (-1)>'
n1 = Node(4, None)
assert n1.value == 4
assert n1.next is None

到目前为止,我的代码如下。如果你对我如何修复它有任何想法,请让我知道。谢谢!

class Node: 
    def __init__(self, value):
        self.value = value
        self.next = None 

def insert(head, value, position):
    new = Node(value) 
    if position ==1: 
        new.next = head
        return new
    current_index = 1
    current_node = head
   
    while current_index< position-1 and current_node is not None:
        current_node = current_node.next
        current_index +=1

    if current_node is None: 
        raise IndexError("Insertion position invalid!")
    else: 
        new.next = current_node.next 
        current_node.next = new 
        return head

def pop(head, position):
    if position==1: 
        return head, head.next 
    current_index = 1
    current_node = head
    while current_index<position-1 and current_node is not None:
        current_node = current_node.next
        current_index += 1
    if current_node is None:
        raise IndexError("Pop position invalid!")
    else:
        current_node.next = current_node.next.next
        return current_node.next , head


def stringify_linked_list(head):
    ret_string = "" 
    pointer = head
    counter = 1
    while pointer is not None:
        ret_string += (str(counter)+":"+str(pointer.value)+"  ") 
        pointer = pointer.next
        counter+=1
    return ret_string

共有1个答案

阙弘博
2023-03-14

您的__init__接受两个参数:selfvalue

在python中创建新对象时,self总是作为对新创建对象(本身)的引用自动传递给构造函数。因此,__init__需要两个参数,但您已经传递了两个参数,并且self被添加为第三个参数。当调用节点(4,None)时,__init__将作为__init__(self,4,None)调用,但它只需要__init__(self,4)

要解决这个问题,要么在init中添加第三个参数,要么在对Node()的调用中删除第二个参数(无论如何都不是?)。

 类似资料: