有没有一种方法可以在不声明变量的情况下调用变量

时间:2020-08-06 10:09:02

标签: python variables linked-list

我正在学习一门数据结构和算法课程。有一个测验要求我编写一些描述链表类型的代码:

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

2 个答案:

答案 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()