如何从链表中求和?

-1 投票
2 回答
4125 浏览
提问于 2025-04-18 16:07

我在用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)

撰写回答