给你两个非空表示两个非负整数的链接列表。数字存储在逆序它们的每个节点都包含一个数字。添加这两个数字并将其作为链接列表返回。
您可以假设这两个数字不包含任何前导零,除了数字0本身。
例子:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
本题我开始的思路就是把输入的两个链表转换为两个十进制的整数之后相加,然后把结果除以10取余数来分解,之后存放在链表里,最后可以通过上面提供的样例,但是下面的样例就无法通过:
投入:[9]
[1,9,9,9,9,9,9,9,9,9]
后发现是下面的数据转换为整形后太大会超出int类型的范围,因此上述方法不能通过。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int a = l1.val,b = l2.val;
int num = 0;
ListNode *LL = l1;
while(LL.next != NULL)
{
LL = LL.next;
num++;
a += LL.val*pow(10,num);
}
LL = l2;
while(LL.next != NULL)
{
LL = LL.next;
num++;
b += LL.val*pow(10,num);
}
int c = a + b;
ListNode *out,*save;
out.val = c % 10;
save = out;
while((c/=10)
{
ListNode *front;
front.val = c%10;
save.next = front;
save = front;
}
save.next = NULL;
return out;
}
};