Python链表最小值

Python Linked list minimum value

我试图在列表中找到最小值,而不必使用 min 函数,而只是通过比较列表中的第一个和下一个元素。 这是我的尝试:

def min(self):
    node = self.head               #1st element 
    Min = 0                        #node.next_node is the next element
    while node:
        if node.value > node.next_node.value:
            Min = node.next_node.value
        else:
            Min = node.value

我只是比较第一个和第二个元素。我如何遍历整个列表

如果不了解您的节点实现的具体细节,将很难具体回答这个问题,因为这几乎肯定是一个家庭作业问题,无论如何都不会运动。

您要做的是遍历列表中的每个元素,并将其与您拥有的 Min 进行比较。如果更高,则转到下一个元素。如果较低,则将 Min 设置为该值,然后转到下一个元素。无需直接比较两个元素:只需将所有元素与 Min 进行比较即可。这种遍历列表并使用单个值变量做某事的方式非常有用:您还可以将其用于移动平均线等事情。

最简单的,如果不是非常优雅的话,首先将 Min 设置为第一个元素的值;这样你就有东西可以比较了。如果您将它设置为其他值,例如 0,那么如果您的所有值都高于 0,您将永远不会设置 Min。另一种方法是将 Min 设置为足够大的值,但这不如将其设置为第一个元素的值安全。

如何循环遍历列表取决于此列表的设计方式。如果节点始终为真,并且列表末尾的 node.next_nodeNone,则 while nodenode = node.next_node 之类的东西可以工作,因为这将在结尾。如果您在最后提出错误,则必须执行其他操作。

要迭代列表,您需要在每次迭代时用下一个节点更新 node 变量:

def rearrange(self):
    node = self.head
    if not node:
        return None    # an empty list
    Min = node.value
    while node:
        if node.value < Min:
            Min = node.value
        node = node.next_node    # move onto the next node
    return Min

请注意,此函数的命名似乎很糟糕 - 重新排列了什么?