题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:
(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:
7 -> 0 -> 8
原因:
342 + 465 = 807
解题思想
模拟竖式加法,逐位相加,注意保存进位。
解题代码
class Solution {
public:
ListNode
* addTwoNumbers(ListNode
* l1
, ListNode
* l2
) {
ListNode
* head
= new ListNode(-1);
ListNode
* cur
= head
;
int carry
= 0;
while(l1
|| l2
|| carry
){
int sum
= (l1
? l1
-> val
: 0) + (l2
? l2
-> val
: 0) + carry
;
carry
= sum
/ 10;
cur
-> next
= new ListNode(sum
% 10);
cur
= cur
-> next
;
if(l1
)
l1
= l1
-> next
;
if(l2
)
l2
= l2
-> next
;
}
return head
-> next
;
}
};