-----QUESTION-----
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of theirnodes contain a single digit. Add the two numbers and return it as a linked list.
Input:
Output:
-----SOLUTION-----
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
if(!l1) return l2;
if(!l2) return l1;
int sum = l1->val + l2->val;
int carry = sum/10;
sum = sum % 10;
ListNode* result = new ListNode(sum);
ListNode* pResult = result;
l1 = l1->next;
l2 = l2->next;
while(l1 && l2)
{
sum = l1->val + l2->val + carry;
carry = sum/10;
sum = sum % 10;
pResult->next = new ListNode(sum);
l1 = l1->next;
l2 = l2->next;
pResult = pResult->next;
}
if(carry!=0)
{
if(!l1&&!l2)
{
pResult->next = new ListNode(carry);
return result;
}
if(l1)
{
pResult->next = l1;
}
else if(l2)
{
pResult->next = l2;
}
while(carry !=0 && pResult->next)
{
sum = pResult->next->val+carry;
carry = sum/10;
sum = sum % 10;
pResult->next->val = sum;
pResult = pResult->next;
}
if(carry!=0) pResult->next = new ListNode(carry);
}
else if(l1) pResult->next = l1;
else if(l2) pResult->next = l2;
return result;
}
};