现在在学校用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
Python中很少使用“链接列表” - 通常,只使用list
,即Python内置列表,它实际上更像是一个“动态向量”。因此,将链接列表指定为练习约束的一部分是很奇怪的。
但重点是,你所展示的代码已经创建了一个链表 - 头部位于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
唯一的微妙之处是,你需要在themax
循环之前初始设置while
为“尽可能低的数字”;在Python的最新版本中,“负无穷大”被可靠地记录和比较(尽管只是作为一个浮点数,它仍然可以正确地与整数进行比较),所以
themax = float('-inf')
会工作。更优雅的可能是最初将最大值设置为第一个有效负载,避免弄乱无穷大。
这是基于您自己的代码和语言的答案。很抱歉,如果新的变量和函数名称不能很好地翻译,因为我不会说挪威语(Google Language Tools是我的朋友)。
评论:像飞机空中交通管制一样,StackOverflow等大多数国际编程论坛的默认语言是英语。如果你使用它,你可能会得到更快,更好,更多的答案 - 它可能使问题和相关答案对其他人最多有用。只是我的2øre... ;-)
from sys import stdin
class Kubbe:
vekt = None
neste = None
def __init__(self, vekt):
self.vekt = vekt
self.neste = None
def spor():
# WRITE YOUR CODE HERE
# Creates linked list
forste = None
siste = None
while True:
try:
linje = raw_input()
except EOFError:
break
forrige_siste = siste
siste = Kubbe(int(linje))
if forste == None:
forste = siste
else:
forrige_siste.neste = siste
return forste
def finne_maksimal(lenketliste):
storste = None
if lenketliste is not None:
storste = lenketliste.vekt
gjeldende = lenketliste.neste
while gjeldende is not None:
if gjeldende.vekt > storste:
storste = gjeldende.vekt
gjeldende = gjeldende.neste
return storste
lenketliste = spor()
storste = finne_maksimal(lenketliste)
if lenketliste is None:
print "tom liste"
else:
print "storste er", storste
Python中有一个名为reduce
的内置函数,它遍历一个列表并用给定的函数“压缩”它。也就是说,如果你有一个包含五个元素[a,b,c,d,e]
和一个函数f
的列表,它将有效地做
temp = f(a,b)
temp = f( temp, c )
...
您应该能够使用它来编写一个非常简洁的解决方案。
如果你想减少抽象,你需要依次遍历列表中的每个元素,将最大数字存储到变量中。仅当您到达的元素大于所述变量的值时才更改变量。
这似乎适用于您的输入(在python 2和3中都有效)。注意max如何使用Python的鸭子输入!
此版本也可以从文件中使用Python3。
import sys
class Kubbe:
vekt = None
neste = None
def __init__(self, vekt):
self.vekt = vekt
self.neste = None
def spor():
# WRITE YOUR CODE HERE
# Creates linked list
forste = None
siste = None
while True:
linje = sys.stdin.readline().rstrip()
if not linje:
break
forrige_siste, siste = siste, Kubbe(int(linje))
if forste is None:
forste = siste
else:
forrige_siste.neste = siste
return forste
def traverse(linkedlist):
while linkedlist is not None:
yield linkedlist.vekt
linkedlist=linkedlist.neste
# Calls the solution function and prints the result
linkedlist=spor()
for item in traverse(linkedlist):
print(item)
# use builtin max:
print('Maximum is %i' % max(traverse(linkedlist)))
# if not allowed:
m = linkedlist.vekt
for item in traverse(linkedlist.neste):
if item > m: m = item
print(m)
以下代码可行。 Node
类代表LinkedList
节点。 LinkedList类定义了在链接列表末尾添加节点的方法,find_max
将遍历列表并返回具有最大键的节点。
class Node(object):
def __init__(self, key, next_node):
self.key = key
self.next_node = next_node
class LinkedList(object):
def __init__(self):
self.head = None
def append(self, key):
# Create a new Node
new_node = Node(key, None)
if (self.head == None):
self.head = new_node
else:
tmp = self.head
while(tmp.next_node != None):
tmp = tmp.next_node
tmp.next_node = new_node
def find_max(self):
tmp = self.head
max_num = 0
while(tmp != None):
if (tmp.key > max_num):
max_num = tmp.key
tmp = tmp.next_node
return max_num