📜  门| GATE-CS-2009 |问题13(1)

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

GATE-CS-2009 | 问题13

这道题目是Gate CS 2009的一道题目,题目如下:

有一个链表,每个结点都保存一个数字,并且在链表末尾添加了一个特殊结点”表尾标记”。如果链表中的数字序列为(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, “”),则这个链表代表的数字为3141592653。现在给定两个这样表示的数字(链表),请方法计算它们的和并返回代表和的链表。

代码:

下面是Python实现的代码:

class ListNode:
# 链表的节点
def __init__(self, x):
self.val = x
self.next = None

class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
res = ListNode(0)
p = res
carry = 0
while l1 or l2 or carry:
x = l1.val if l1 else 0
y = l2.val if l2 else 0
carry, val = divmod(x + y + carry, 10)
p.next = ListNode(val)
p = p.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return res.next

解析:

题目要求我们计算两个代表数字的链表的和,这是一个高精度加法题目。我们可以直接遍历两个链表,并按照加法的规则相加,同时记录进位。将相加的结果存入一个新的链表中即可。

总结:

这道题目检验的内容主要是链表的遍历和高精度加法的实现。在面对类似的高精度计算题目时,需要仔细设计思路,注意数据类型转换,逐位相加。