https://leetcode.com/problems/add-two-numbers-ii/
1. Use recursion:
//36 ms 70.6 MB/*** 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) {if(!l1) return l2;else if(!l2) return l1;ListNode* curr1 = l1;ListNode* curr2 = l2;ListNode* result = NULL;int len1 = 0, len2 = 0;while(curr1){ curr1=curr1->next; len1++; }while(curr2){ curr2=curr2->next; len2++; }curr1 = l1; curr2 = l2;while(len1 > 0 && len2 > 0){int sum = 0;if(len1 >= len2){sum += curr1->val; curr1=curr1->next; len1--;}if(len2 > len1){sum += curr2->val; curr2=curr2->next; len2--;}result = addToFront(sum, result);}curr1 = result;result = NULL;int carry = 0;while(curr1){curr1->val += carry;carry = curr1->val / 10;result = addToFront( curr1->val % 10, result);curr2 = curr1;curr1 = curr1->next;delete curr2;}if(carry)result = addToFront(1, result);return result;}private:ListNode* addToFront(int val, ListNode* head){ListNode* temp = new ListNode(val);temp->next = head;return temp;}};
