题目描述:

给定两个非空的链表,要求从头将两个列表中的值相加,并将结果存储到另一个列表中。

这里主要处理的一个问题就是两个数相加的进位问题!我们直到列表中元素的取值范围在[0−9][0 - 9][0−9],那么最大的两个元素相加9+9=189+9=189+9=18,这时进位为1,所以可以看出进位的取值范围为[0,1][0, 1][0,1]。
AC代码:
class Solution{
public:
//法1
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2){
//存储一个存储结果的列表,初始化头部为-1
ListNode *res = new ListNode(-1);
//cur指向列表的头部
ListNode *cur = res;
//初始化进位为0
int carry = 0;
//遍历l1和l2,直到全部为空
while (l1 != NULL || l2 != NULL){
//相加
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
//更新进位,若sum > 10,则carry = 1
carry = sum / 10;
//将取余的结果存储到新节点中
cur->next = new ListNode(sum % 10);
//指针后移
cur = cur->next;
//当不为空时,指针后移,继续运算
if (l1)
l1 = l1->next;
if (l2)
l2 = l2->next;
}
//计算最后一位时,若存在进位,则添加新的节点
if (carry)
cur->next = new ListNode(1);
return res->next;
}
参考:
Add Two Numbers 解题报告 (https://blog.youkuaiyun.com/crazy1235/article/details/52914703)
[Add Two Numbers Solution](https://leetcode.com/problems/add-two-numbers/solution/)
809

被折叠的 条评论
为什么被折叠?



