题目
描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例2
输入:l1 = [0], l2 = [0]
输出:[0]
示例3
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示
(1)每个链表中的节点数在范围 [1, 100]
内
(2)0 <= Node.val <= 9
(3)题目数据保证列表表示的数字不含前导零
解题思路
(1)定义ListNode类
>>>class ListNode:
... def __init__(self, val=0, next=None):
... self.val = val
... self.next = next
(2)以示例1为例,先创建链表l1和l2,每个节点由(val,next)组成,最后一个next为None
[ 3, [ 4, [ 2 , None ] ] ]
>>>l1 = [2,4,3]
>>>def creat_node_list(list_data):
... node_list = None
... for i in list_data:
... node = ListNode()
... node.val = i
... node.next = node_list
... node_list = node
... return node_list
>>>l1 = creat_node_list(l1)
>>>l1.val
3
>>>l1.next.val
4
>>>l1.next.next.val
2
>>>l1.next.next.next
None
>>>l2 = [5,6,4]
>>>l2 = creat_node_list(l2)
>>>l2.val
4
>>>l2.next.val
6
>>>l2.next.next.val
5
>>>l2.next.next.next
None
(3)将s作为存储相加结果,s%10(个位)存进上一节点,s//10(十位)作为新的s与下一个节点的和相加
(4)最终结果存进dummy链表中
(5)通过next和val函数对结果进行输出
代码
def creat_node_list(list_data):
node_list = None
for i in list_data:
node = ListNode()
node.val = i
node.next = node_list
node_list = node
return node_list
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:
dummy = p = ListNode(None)
s = 0
while l1 or l2 or s != 0:
s += (l1.val if l1 else 0) + (l2.val if l2 else 0)
p.next = ListNode(s % 10)
p = p.next
if l1: l1 = l1.next
if l2: l2 = l2.next
s = s // 10
return dummy.next
if __name__ == "__main__":
l1 = [2,4,3]
l2 = [5,6,4]
a = Solution()
a.addTwoNumbers(creat_node_list(l1),creat_node_list(l2))
print("".join([a.val, a.next.val, a.next.next.val]))