先反转链表,然后逐个加和并计算进位,最后再反转回来。
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); } };