当我插入一个新节点时,我得到AttributeError:'Node'对象没有属性'set_next'。我真的不明白为什么,因为在我的Node类中,我有一个方法set_next。那不是我要打的电话吗?
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
def get_data(self):
return self.val
def set_data(self, val):
self.val = val
def get_next(self):
return self.next
def set_next(self, next):
self.next = next
class LinkedList(object):
def __init__(self, head=None):
self.head = head
self.count = 0
def get_count(self):
return self.count
def insert(self, data):
new_node = Node(data)
new_node.set_next()
self.head = new_node
self.count += 1
预期输出是新节点应该是新的头节点。
答案 0 :(得分:2)
这将修复AttributeError
和后续的TypeError
。
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
# fixed indentation here
def get_data(self):
return self.val
def set_data(self, val):
self.val = val
def get_next(self):
return self.next
def set_next(self, next):
self.next = next
class LinkedList(object):
def __init__(self, head=None):
self.head = head
self.count = 0
def get_count(self):
return self.count
def insert(self, data):
new_node = Node(data)
# fix logic here
new_node.set_next(self.head)
self.head = new_node
self.count += 1
测试
linked_list = LinkedList()
linked_list.insert('hello')
linked_list.insert('world')
print(linked_list.count)
print(linked_list.head.val)
print(linked_list.head.next.val)
输出
2
world
hello
请注意,如您所见,此LinkedList仅插入列表的开头,而不是结尾。
如果要遍历列表,请使用此方法
def __iter__(self):
node = self.head
while node is not None:
yield node.val
node = node.next
答案 1 :(得分:1)
按照您的缩进顺序显示,
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
def get_data(self):
return self.val
get_data
和以下功能(包括set_next
)是__init__
方法的本地功能。
因此,如错误所示,是“ Node class does not have a
set_next`方法。
您需要将它们拉回去
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
def get_data(self):
return self.val
#... and the rest
这会给您带来更多的问题,但可以解决您最初的问题。
接下来,您将看到
File "linked.py", line 28, in insert
new_node.set_next()
TypeError: set_next() missing 1 required positional argument: 'next'
正如评论中所说,您需要传递一个值。
我怀疑您正在尝试将next
的头节点或最后一个节点设置为new_node
。
答案 2 :(得分:1)
我尝试过此方法,希望对您有所帮助:
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
def get_data(self):
return self.val
def set_data(self, val):
self.val = val
def get_next(self):
return self.next
def set_next(self, next):
self.next = next
class LinkedList(object):
def __init__(self, head=None):
self.head = head
self.count = 0
def get_count(self):
return self.count
def insert(self, data):
new_node = Node(data)
new_node.set_next(self.head)
self.head = new_node
self.count += 1
>>> itemList = LinkedList()
>>> itemList.insert(38)
>>> itemList.insert(40)
>>> itemList.get_count()
2