445. Add Two Numbers II
题目链接:445. Add Two Numbers II
题意
给出由链表表示的两个整数,求用链表表示的这两个数的和。
解法
先将这两条链表转换成两个数组,然后从这两个数组最后位置出发求和,将结果保存在第三个数组中,最后将第三个数组翻转成链表即可。
代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(!l1)
return l2;
if(!l2)
return l1;
vector<int> num1, num2, result;
while(l1){
num1.push_back(l1->val);
l1 = l1->next;
}
while(l2){
num2.push_back(l2->val);
l2 = l2->next;
}
int len1 = num1.size(), len2 = num2.size();
result.resize(len1 + len2 + 2, 0);
int current = 0;
--len1;
--len2;
while(len1 > -1 || len2 > -1){
if(len2 < 0){
result[current + 1] += (result[current] + num1[len1]) / 10;//放前面
result[current] = (result[current] + num1[len1--]) % 10;
}else if(len1 < 0){
result[current + 1] += (result[current] + num2[len2]) / 10;
result[current] = (result[current] + num2[len2--]) % 10;
}else{
result[current + 1] += (result[current] + num1[len1] + num2[len2]) / 10;
result[current] = (result[current] + num1[len1--] + num2[len2--]) % 10;
}
++current;
}
if(!result[current])
--current;
ListNode *dummy = new ListNode(0), *cur = dummy;
while(current > -1){
cur->next = new ListNode(result[current--]);
cur = cur->next;
}
return dummy->next;
}
};
算法复杂度
算法复杂度为O(n+m),m、n分别为两个链表的长度。