Python链表最小值

时间:2015-05-04 01:59:47

标签: python list python-3.x linked-list

我试图找到列表中的最小值,而不必使用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

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

2 个答案:

答案 0 :(得分:3)

如果不知道节点实现的具体细节,那么具体回答这个问题很困难,因为这几乎肯定是一个功课问题,无论如何都不会运动。

您要做的是浏览列表中的每个元素,并将其与您拥有的Min进行比较。如果它更高,那么只需转到下一个元素。如果它更低,则将Min设置为该值,然后转到下一个元素。没有必要直接比较两个元素:只需将所有内容与Min进行比较。这种通过列表并使用单个值变量执行某些操作的方式非常有用:您还可以将其用于移动平均值等事项。

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

如何遍历列表取决于此列表的设计方式。如果某个节点始终为true,并且列表末尾的while nodenode = node.next_node,则node.next_nodeNone之类的内容可以正常工作,因为这会停止结束。如果您最后提出错误,那么您将不得不做其他事情。

答案 1 :(得分:2)

要迭代列表,您需要在每次迭代时使用下一个节点更新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

请注意,此功能似乎命名不佳 - 重新排列了什么?