Python;链表和遍历!

2024-06-09 13:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

现在在学校开始用python编程,我不知道如何处理这个问题。有什么想法吗?

输入由整数组成,由换行符分隔。你的程序应该将它们提交到一个链表中,遍历链表并打印出最高的数字。

采取第一个数字,并做一个行动,说“如果下一个数字更大,采取一个,否则,保持当前的数字,并头向下的名单和重复”

然后当它到达列表的末尾时,它会打印它所拥有的值。

from sys import stdin

class Kubbe:
    vekt = None
    neste = None
    def __init__(self, vekt):
        self.vekt = vekt 
        self.neste = None 

def spor(kubbe):
    # WRITE YOUR CODE HERE
    # Creates linked list
    forste = None
    siste = None
    for linje in stdin:
        forrige_siste = siste
        siste = Kubbe(int(linje))
        if forste == None:
            forste = siste
        else:
            forrige_siste.neste = siste

# Calls the solution function and prints the result
print spor(forste)

输入:示例

54
37
100
123
1
54

所需输出

123

Tags: theselfnonedefstdin数字链表spor
2条回答

Python中有一个名为reduce的内置函数,它遍历一个列表并用给定的函数“压缩”它。也就是说,如果您有一个包含5个元素的列表[a,b,c,d,e]和一个函数f,那么它将有效地

temp = f(a,b)
temp = f( temp, c )
...

你应该能够用这个来写一个非常简洁的解决方案。

如果你想不那么抽象,你就需要依次遍历列表中的每个元素,在变量中存储到目前为止最大的数字。仅当达到的元素大于所述变量的值时才更改变量。

“链表”在Python中很少使用——通常,人们只使用Python内置的列表list,它实际上更像一个“动态向量”。因此,看到一个链接列表被指定为练习约束的一部分是很奇怪的。

但重点是,您显示的代码是已经创建了一个链表——头在forste,对于每个节点,下一个节点指针在.neste,有效负载在.vekt。所以,不管你的问题是什么,这大概不是你要问的。

一旦您完全构建了链表(即,在当前的spor代码末尾),循环遍历链表的简单方法是

current = forste
while current is not None:
   ...process current.vekt...
   current = current.neste

在你的例子中,“过程”部分的逻辑当然是,正如你的Q的文本已经说的:

   if current.vekt > themax:
       themax = current.vekt

唯一的微妙之处是,在这个while循环之前,您需要首先将themax设置为“可能的最小值”;在最新版本的Python中,“负无穷大”被可靠地记录和比较(尽管它只是一个浮点数,但仍然与int进行正确的比较),因此

themax = float('-inf')

会有用的。更优雅的做法可能是,最初将最大值设置为第一个有效载荷,避免混淆无穷大。

相关问题 更多 >