【LeetCode】两数相加详细题解

题目链接

题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

输入样例

(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出样例

7 -> 0 -> 8

样例解释

342 + 465 = 807

解题思路

这是一道模拟题,模拟我们手算的过程即可。但有一个内存优化的点就是我们可以选取链长的链表来存取结果,另外我们在模拟计算时注意一下进位即可。

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

ListNode* temp1 = l1;
ListNode* temp2 = l2;
ListNode* ans;
int add = 0, temp = 0, len1 = 0, len2 = 0;
while(temp1 != NULL){
len1++;
temp1 = temp1->next;
}
while(temp2 != NULL){
len2++;
temp2 = temp2->next;
}
if (len1 > len2)
ans = l1;
else
ans = l2;
temp1 = ans;
while(l1 != NULL || l2 != NULL){
temp = add;
if (l1 != NULL){
temp += l1->val;
l1 = l1->next;
}
if (l2 != NULL){
temp += l2->val;
l2 = l2->next;
}
add = temp / 10;
temp = temp % 10;
temp1->val = temp;
if (temp1->next != NULL)
temp1 = temp1->next;
}
if (add > 0){
temp1->next = new ListNode(1);
}
return ans;
}
};
-------------本文结束您的阅读与肯定是我持续装*的最大动力-------------