题目:
解答:
首先找出较长的那个链表 存结果。
然后先相加公共部分,再相加非公共部分。
如果两个链表长度相等,或者是链表最后有进位,那么结果链表的最后节点已经到达尾节点,需要重新寻找到最后一个元素。
代码:
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
int len1 = 0, len2 = 0;
ListNode *temp = l1;
while (temp)
{
++len1;
temp = temp->next;
}
temp = l2;
while (temp)
{
++len2;
temp = temp->next;
}
//较长的链表存结果
ListNode *result = len1 > len2 ? l1 : l2;
ListNode *res = result;
int sum = 0, carry = 0;
while (l1 && l2)
{
sum = carry + l1->val + l2->val;
res->val = sum % 10;
carry = sum / 10;
l1 = l1->next;
l2 = l2->next;
res = res->next;
}
//如果l1不为空
if (l1)
{
while (l1)
{
sum = l1->val + carry;
res->val = sum % 10;
carry = sum / 10;
l1 = l1->next;
res = res->next;
}
}
//如果l2不为空
else if (l2)
{
while (l2)
{
sum = l2->val + carry;
res->val = sum % 10;
carry = sum / 10;
l2 = l2->next;
res = res->next;
}
}
//如果两个链表长度相等 或者 相加完两个不相等的链表之后还有进位
if (carry != 0)
{
res = result;
//重新找到最后一个节点
while (res->next)
{
res = res->next;
}
ListNode *node = new ListNode(carry);
res->next = node;
}
return result;
}
};