原题
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
在真实的面试中遇到过这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
这道题,可以首先将两个链表里的元素转化为十进制数,在用十进制数相加,最后进行字符切片并反向提取元素即可
首先转化为十进制:
while l11:
num_l1 = num_l1 + l11.val * i
i = i * 10
l11 = l11.next
while l22:
num_l2 = num_l2 + l22.val * j
j = j * 10
l22 = l22.next
再将两者相加并逆向切片
str_num = str(num_l1 + num_l2)
str_num = str_num[::-1]
之后新建链表,将相加的元素存储如链表中
l3 = l4 = ListNode(0)
for s in str_num:
l4.next = ListNode(int(s))
l4 = l4.next
return l3.next
注意,这里返回的是l3,next,因为这里我们有一个虚拟结点值为0.
测试结果: