问题描述
给定两个代表非负整数的非空链表,数字以反向的形式存放在链表中,并且每个节点包含一个数字,请将两个数值相加求和并且存放在链表
中返回。假设里两个数值都不包含开首的0数字,除了0数值本身。
如输入:( 2 -> 4 -> 3) + ( 5 -> 6-> 4 )
输出: 7 -> 0 -> 9
因为: 342 + 465 = 807
解答
两数相加的计算本不是什么难题,在本题中将数字存放在链表中,也考察了链表使用的熟练程度,这里就不介绍链表知识点的普及了。
本题中需要注意两个点,一个是当某一个链表遍历结束的处理,一个是进位的处理。我们用carry值表示进位的数值,carry = (a(l1) + b(l2) + carry(上一次计算的carry值)) / 10
,val表示当前节点值 (a + b + carry) % 10
,存放到链表中
简单计算流程如下:
1 | # Definition for singly-linked list. |
时间复杂度位O(max(m,n)),其中m,n分别是链表l1和链表l2的长度。空间复杂度也为O(max(m,n))。