📜  链接列表中所有回文数的总和(1)

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

回文数链表的总和

简介

本文介绍如何编写一个算法,计算链表中所有回文数的总和。回文数即正反读法均相同的整数,例如:121,1221,24642等。

实现思路

我们可以遍历链表的每一个节点,将节点的值转换成字符串,并检查该字符串是否为回文。如果是回文,则将该节点的值加入总和中。

具体实现可以使用递归的方式,每一次递归中判断当前节点是否为回文,并将当前节点的值加入总和中,然后递归调用下一个节点。

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

def is_palindrome(num):
    # 判断一个数是否为回文
    return str(num) == str(num)[::-1]

def palindrome_sum(head):
    # 遍历链表,查找回文数并计算总和
    def traversal(node):
        nonlocal total
        if not node:
            return
        if is_palindrome(node.val):
            total += node.val
        traversal(node.next)

    total = 0
    traversal(head)
    return total
使用样例

下面是一个使用样例:

# 构建样例链表:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, ListNode(6, ListNode(7, ListNode(8, ListNode(9, ListNode(10))))))))))

# 计算回文数的总和
print(f"回文数的总和为:{palindrome_sum(head)}")

输出结果为:

回文数的总和为:45

说明样例链表中有两个回文数:1和2,它们的和为3;3和3,它们的和为6;4和4,它们的和为8;5和5,它们的和为10;6和6,它们的和为12,7和7,它们的和为14,8和8,它们的和为16,9和9,它们的和为18,10和01,它们的和为11;所以总和为3+6+8+10+12+14+16+18+11=45。