我正在学习一门数据结构和算法课程。有一个测验要求我编写一些描述链表类型的代码:
class LinkedList(object):
def __init__(self, head):
self.head = head
def append(self, new_element):
current = self.head
if self.head:
while current.next:
current = current.next
current.next = new_element
else:
self.head = new_element
上面的代码是该课程为我制作的示例。但是在“ while current.next”循环中有一个我不了解的地方,很明显,尚未声明“ current.next”变量。我已经研究了“下一个”问题,但这只是有关next()方法的问题。 如果您感兴趣,请按照以下课程进行:https://classroom.udacity.com/courses/ud513/lessons/7117335401/concepts/78875247320923
答案 0 :(得分:0)
当前代码中的伙伴是使用self.head变量设置的,该变量已提供给构造函数。因此,当只能从实例调用该函数时,将始终对其进行设置。在您的示例中,他们期望head是一个链表。
简而言之。您的解释完全不对。将始终设置current,并且由于我们当前将是一个链表,因此它将具有下一个属性。调用current.next时,您将获得一个返回值。如果还有其他元素,则转到下一个元素;如果收到“无”(“无元素”),则将设置下一个元素。
只有没有意义的事情是检查是否将self.head设置为该函数属于实例,并且唯一的构造方法要求设置head。也许宁可检查一下self.head的类型。
答案 1 :(得分:0)
.next
属性必须由构造链表并将其附加对象时传递的东西提供。
这是一个如何工作的非常基本的例子
class LinkedList(object):
def __init__(self, head):
self.head = head
def append(self, new_element):
current = self.head
if self.head:
while current.next:
current = current.next
current.next = new_element
else:
self.head = new_element
#added for demonstration
def output_values(self):
current = self.head
while current:
print(current.value)
current = current.next
class LinkedObject:
next = None
value = None
def __init__(self, val=None, nextObject=None):
if nextObject:
self.next = nextObject
if val:
self.value = val
ll = LinkedList(LinkedObject(5))
ll.append(LinkedObject(24))
ll.append(LinkedObject(332))
ll.output_values()