您的位置:首页 > 其它

Add Two Numbers 链表相加

2014-08-29 22:21 429 查看
题目:

点击打开链接

解答:

首先找出较长的那个链表 存结果。

然后先相加公共部分,再相加非公共部分。

如果两个链表长度相等,或者是链表最后有进位,那么结果链表的最后节点已经到达尾节点,需要重新寻找到最后一个元素。

代码:

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: