class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(-1);
auto* tail = head;
int carry = 0;
while (l1 || l2 || carry){
int sum = (l1? l1->val:0) + (l2? l2->val:0) + carry;
carry = sum / 10;
int digit = sum % 10;
ListNode* cur = new ListNode(digit);
tail->next = cur;
tail = tail->next;
l1 = l1? l1->next:l1;
l2 = l2? l2->next:l2;
}
return head->next;
}
};