类Node用一个值和对链表中下一个节点的引用进行实例化。节点上的值可访问节点的值。可以通过节点上的next访问对列表中下一个节点的引用。
函数insert引用链表中的第一个节点、一个新的值和一个位置,并在列表中的给定位置插入一个具有给定值的新节点。
函数popto引用链表中的第一个节点和一个位置,并删除链表中该位置的节点。
函数stringify_linked_list引用链表的第一个节点,并返回链表中所有节点的可打印字符串。
然而,当我尝试通过进行测试时
assert repr(Node(-1, None)) == '<Node (-1)>'
和
n1 = Node(4, None)
assert n1.value == 4
assert n1.next is None
我得到一个TypeError:init((需要2个位置参数,但有3个是
到目前为止,我的代码如下。如果你对我如何修复它有任何想法,请告诉我。非常感谢。
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
您的__init__
采用两个参数:self
和value
。
当您在python中创建新对象时,self总是自动传递给构造函数,作为对新创建对象(自身(的引用。因此,您的__init__
需要两个参数,但您已经传递了两个,self被添加为第三个。当您调用Node(4, None)
时,__init__
会被调用为__init__(self, 4, None)
,但它只需要__init__(self, 4)
。
要解决这个问题,可以在init中添加第三个参数,也可以在对Node((的调用中删除第二个参数(无论如何都是None?(。