题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:一开始的思路是遍历两个链表,然后逆序相加,和存到第三个链表里,但是我一直在想怎么样逆序输出,直到我看到了“它们各自的位数是按照 逆序 的方式存储的”才反应过来,他已经是逆序存储了,不需要再次逆序输出(论仔细审题的重要性)。所以在遍历两个链表之后,按顺序相加,如果相加的数<10,则继续;如果>=10,则需要进位和取余操作,每次计算之后将结果存在第三个链表里,最后输出第三个链表的值即可。
代码:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: a = ListNode() l3 = a c = 0 #进位 while l1 or l2: x = l1.val if l1 else 0 y = l2.val if l2 else 0 temp = x + y if temp + c >= 10: l3.next = ListNode((temp + c) % 10) c = 1 else: l3.next = ListNode(temp + c) c = 0 if l1: l1 = l1.next if l2: l2 = l2.next l3 = l3.next if c == 1: l3.next = ListNode(1) return a.next
题目来自于LeetCode第2题