如何从链表中求和?
我在用Python编写代码,想通过单向链表来计算一个列表中所有偶数的总和。我觉得我已经写好了链表的部分代码,但我不知道怎么才能只取出偶数并把它们加起来。目前我的代码大致是这样的:
def createList(plist):
linkedList = None
# goes backwards, adding each element to the beginning
# of the list.
for index in range(len(plist)-1, -1, -1):
linkedList = insertValueHead(linkedList, plist[index])
return linkedList
def sumEvens(linkedList): #This is what I'm looking for help with
.... #code
def testSumEvens():
myList = createList([14, 21, 29, 2, 16, 49, -26])
print "The sum of the even numbers in the first list is ", sumEvens(myList)
myList = createList([])
print "The sum of the even numbers in an empty list is ", sumEvens(myList)
myList = createList([5, 15, 25])
print "The sume of the even numbers in the final list is ", sumEvens(myList)
我该怎么做才能让这个代码计算出这些列表的总和呢?比如在第一个列表中,14 + 2 + 16的结果。
2 个回答
0
这里有一个非常基础的链表示例
class LLNode:
def __init__(self,value):
self.next = None
self.val = value
def __float__(self):
return float(self.val)
def __int__(self):
return int(self.val)
def __str__(self):
return str(self.val)
class LL:
head =None
def iterNodes(self):
tmp = self.head
while tmp is not None:
yield tmp
tmp = tmp.next
def iterInts(self):
for node in self.iterNodes():
try:
yield int(node)
except ValueError:
pass
def iterFloats(self):
for node in self.iterNodes():
try:
yield float(node)
except ValueError:
pass
def iterStrings(self):
for node in self.iterNodes():
yield str(node)
def insert(self,value):
nn = LLNode(value)
if self.head is None:
self.head = nn
else:
list(self.iterNodes())[-1].next = nn
l = LL()
l.insert(1)
l.insert(2)
l.insert(3)
l.insert(4)
l.insert(5)
l.insert(6)
print "Sum of Even:",sum([n for n in l.iterInts() if n%2 == 0])
print "Sum of Odd:", sum([n for n in l.iterInts() if n%2 != 0])
我觉得你最关心的是iterFunctions
这个部分
0
之前提到过,取一个数字的模(用 %
表示)会得到这个数字除以另一个数字后的余数。所以,如果 n%2
等于 0,那这个数字就是偶数。你可以这样来实现求偶数和的功能...
def sumEvens(linkedList):
runningSum = 0
for number in linkedList:
if number % 2 == 0:
runningSum += number
print number
print runningSum
sumEvens([14, 21, 29, 2, 16, 49, -26]) # prints 6 (14+2+16-26)