1.代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
bool flag = true;
ListNode* l3 = new ListNode;
ListNode* point = l3;
int carry = 0;
while(l1 != nullptr && l2 != nullptr){
point->val = (l1->val + l2->val + carry) % 10;
carry = (l1->val + l2->val + carry) / 10;
l1 = l1->next;
l2 = l2->next;
if (!(l1 == nullptr && l2 == nullptr)){
point->next = new ListNode;
point = point->next;}
if(l2 == nullptr) flag = false;
}
if(flag){
while(l2 != nullptr){
point->val = (l2->val + carry) % 10;
carry = (l2->val + carry) / 10;
l2 = l2->next;
if(l2 != nullptr){
point->next = new ListNode;
point = point->next;}
}
}
else{
while(l1 != nullptr){
point->val = (l1->val + carry) % 10;
carry = (l1->val + carry) / 10;
l1 = l1->next;
if(l1 != nullptr){
point->next = new ListNode;
point = point->next;}
}
}
if(carry){
point->next = new ListNode(carry);
}
return l3;
}
};
2.思路
先对两链表都非空的部分做加法,再分别对l1较长,l2较长和l1,l2一样长的情况分别讨论。最后一位如果有进位就在l3末尾加上最高位,如果没有进位则无需额外处理。