📜  可被 K 整除的循环单链表节点的和和积(1)

📅  最后修改于: 2023-12-03 14:50:38.983000             🧑  作者: Mango

可被 K 整除的循环单链表节点的和和积

循环单链表是指链表中最后一个节点指向链表的第一个节点,形成一个循环。本文将介绍如何求解可被 K 整除的循环单链表节点的和和积。

算法思路

我们可以遍历循环单链表中的每个节点,依次计算它们的和和积,并记录可被 K 整除的节点个数。最后将它们分别输出即可。

代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def get_list_sum_and_product(head: ListNode, K: int) -> tuple:
    """
    计算可被 K 整除的循环单链表节点的和和积
    :param head: 循环单链表的头节点
    :param K: 除数
    :return: 可被 K 整除的节点的和和积
    """
    if not head:  # 链表为空
        return 0, 0
    
    current = head.next
    sum_, product, cnt = 0, 1, 0
    while current != head:
        if current.val % K == 0:  # 可被 K 整除
            sum_ += current.val
            product *= current.val
            cnt += 1
        current = current.next
    
    if head.val % K == 0:  # 处理头节点
        sum_ += head.val
        product *= head.val
        cnt += 1
    
    return sum_, product, cnt
测试示例

我们来测试一下上面的函数,以保证它的正确性。

if __name__ == '__main__':
    # 构造循环单链表 1 -> 2 -> 3 -> 4 -> 1
    node1 = ListNode(1)
    node2 = ListNode(2)
    node3 = ListNode(3)
    node4 = ListNode(4)
    
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node1
    
    assert get_list_sum_and_product(node1, 2) == (6, 8, 2)  # 2, 4 可被 2 整除
    assert get_list_sum_and_product(node1, 3) == (4, 24, 1)  # 3 可被 3 整除
    assert get_list_sum_and_product(node1, 5) == (0, 0, 0)  # 没有节点可被 5 整除
总结

本文介绍了如何求解可被 K 整除的循环单链表节点的和和积。算法思路比较简单,主要是遍历循环单链表中的每个节点,逐一计算它们的和和积,并记录可被 K 整除的节点个数。如果你对链表的操作不熟悉,建议你先学习链表的基础知识。