📅  最后修改于: 2023-12-03 14:50:38.983000             🧑  作者: Mango
循环单链表是指链表中最后一个节点指向链表的第一个节点,形成一个循环。本文将介绍如何求解可被 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 整除的节点个数。如果你对链表的操作不熟悉,建议你先学习链表的基础知识。