我正在使用Python刷新一些数据结构和算法,所以我正在实现一个无序链接列表。在同一个文件中,我首先编写了一个Node类,后跟一个List类。我不能得到的是当前的"我的search_item()方法中的变量似乎是一个节点对象,或者至少能够访问Node类的方法和属性。我注意到如果我注释掉我的add_node()方法然后"当前"不再能访问Node的方法。现在我没有明确地使用继承和组合,所以我很难看到当前如何调用get_next()以及下面编写代码的方式。我认为我必须声明当前为:current = Node(self.head)但只是current = self.head似乎有用吗? 非常感谢您的帮助。
class Node:
def __init__(self, data):
self.data = data
self.next = None
def get_data(self):
return self.data
def set_data(self, d):
self.data = d
def get_next(self):
return self .next
def set_next(self, n):
self.next = n
class UnorderedList:
def __init__(self):
self.head = None
def add_node(self, item):
tmp = Node(item)
tmp.set_next(self.head)
self.head = tmp
def search_item(self, item):
current = self.head
# current = Node(self.head)
found = False
while current != None and not found:
if current.get_data() == item:
found = True
else:
current = current.get_next()
return found
答案 0 :(得分:0)
如果您注释掉add_node
,那么您不再向链接列表添加节点,因此search_item
始终会看到self.head
的初始值None
。
调用current.get_next()
只是有效,因为通过add_node
始终确保self.head
指向None
或指向Node
的{{1}}实例tmp
}由tmp = Node(item)
创建,然后分配给self.head = tmp
。因此,在设置current = self.head
时,它会引用Node
(或None
)的实例,因此您无需致电current = Node(self.head)
。
答案 1 :(得分:0)
我最近遇到了鸭子打字的概念,这是我的老职位。看来这是在起作用,当时还不了解。默认情况下,“当前”设置为“无”,通过调用Node类中定义的任何方法,它会自动定义为Node对象。