先反转链表,然后逐个加和并计算进位,最后再反转回来。

class Solution {
public:
    ListNode* reverse(ListNode* head)
    {
        ListNode *pre = nullptr, *cur = head, *next = nullptr;
        while(cur != nullptr)
        {
            next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        head1 = reverse(head1);
        head2 = reverse(head2);
        int keta = 0, bit = 0;
        ListNode* pHead = head1, *pre1 = nullptr;
        while(head1 != nullptr && head2 != nullptr)
        {
            int temp = head1->val + head2->val + keta;
            keta = temp / 10;
            bit = temp % 10;
            head1->val = bit;
            pre1 = head1, head1 = head1->next;
            head2 = head2->next;
        }
        if(head1 == nullptr)
            pre1->next = head2;
        ListNode *tsuzuki = pre1->next;
        while(keta == 1 && tsuzuki != nullptr)
        {
            int temp = tsuzuki->val + keta;
            keta = temp / 10;
            bit = temp % 10;
            tsuzuki->val = bit;
            if(keta == 1 && tsuzuki->next == nullptr)
            {
                tsuzuki->next = new ListNode(1);
                keta = 0;
            }
            tsuzuki = tsuzuki->next;
        } 
        return reverse(pHead);
    }
};