lid*_*alv 2 python traversal linked-list
现在在学校用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)
Run Code Online (Sandbox Code Playgroud)
输入:例子
54
37
100
123
1
54
Run Code Online (Sandbox Code Playgroud)
要求的输出
123
Run Code Online (Sandbox Code Playgroud)
Python中很少使用"链接列表" - 通常,只使用listPython内置列表,这实际上更像是一个"动态向量".因此,将链接列表指定为练习约束的一部分是很奇怪的.
但重点是,您显示的代码已经创建了一个链表 - 头部位于forste,并且,对于每个节点,下一个节点指针位于.neste,有效负载位于.vekt.所以,大概,不管你的问题是什么,这都不是你所要求的.
完全构建链接列表后,循环遍历链表的简单方法(即,在当前代码的末尾spor)
current = forste
while current is not None:
...process current.vekt...
current = current.neste
Run Code Online (Sandbox Code Playgroud)
在您的情况下,"过程"部分的逻辑当然是,因为您的Q的文本已经说明:
if current.vekt > themax:
themax = current.vekt
Run Code Online (Sandbox Code Playgroud)
唯一的微妙之处在于,您需要themax在此while循环之前初始设置为"尽可能低的数字"; 在Python的最新版本中,"负无穷大"被可靠地记录和比较(尽管只是作为一个浮点数,它仍然可以正确地与整数进行比较),所以
themax = float('-inf')
Run Code Online (Sandbox Code Playgroud)
会工作.更优雅的可能是最初将最大值设置为第一个有效负载,避免弄乱无穷大.