📜  单链接列表的所有斐波那契节点的总和与乘积(1)

📅  最后修改于: 2023-12-03 15:22:49.682000             🧑  作者: Mango

单链接列表的所有斐波那契节点的总和与乘积

如果你在处理单链接列表,并且想要计算其中所有斐波那契节点的总和和乘积,那么你就来对地方了!

思路
  1. 创建一个函数,用于判断一个数字是否为斐波那契数。
  2. 遍历单链接列表,将其中的所有斐波那契节点取出来,保存到一个列表中。
  3. 对于保存下来的斐波那契节点,分别计算它们的总和和积。
  4. 返回总和和积。
代码实现
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def is_fibonacci(n):
    a, b = 0, 1
    while b < n:
        a, b = b, a + b
    return b == n

def fibonacci_sum_product(head):
    fibonacci_nums = []
    curr = head
    while curr:
        if is_fibonacci(curr.val):
            fibonacci_nums.append(curr.val)
        curr = curr.next
    if not fibonacci_nums:
        return 0, 0
    else:
        total_sum = sum(fibonacci_nums)
        total_product = functools.reduce((lambda x, y: x * y), fibonacci_nums)
        return total_sum, total_product
使用示例

假设我们有以下单链接列表:

head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(5)
head.next.next.next.next = ListNode(8)
head.next.next.next.next.next = ListNode(13)
head.next.next.next.next.next.next = ListNode(21)

我们可以调用 fibonacci_sum_product 函数来计算该列表中所有斐波那契节点的总和和积:

print(fibonacci_sum_product(head))  # (47, 1247400)
结论

现在你拥有了一个能够计算单链接列表中所有斐波那契节点的总和和积的函数。当你需要处理类似的数据时,这个函数可以派上用场。