Nice & Easy C++ Solution with O(n) space and time complexity


#1

ListNode* Solution::addTwoNumbers(ListNode* A, ListNode* B)
{
if(A==NULL)
return B;
if(B==NULL)
return A;

//A=Reverse(A);
//B=Reverse(B);
ListNode *C=NULL,*temp;
int carry=0;
int cal;
while(A || B)
{
    if(A && B && C==NULL)
    {
        cal=A->val+B->val;
        C=new ListNode(cal%10);
        carry=cal/10;               // 9 9 1  0
        temp=C;                     // 1      1 0 1 
    }
    else if(A && B && C)
    {
        cal=A->val+B->val+carry;
        temp->next=new ListNode(cal%10);
        carry=cal/10;
        temp=temp->next;
    }
    else if(B==NULL)
    {
        cal=A->val+carry;
        temp->next=new ListNode(cal%10);
        carry=cal/10;
        temp=temp->next;
        
    }
    else
    {
        cal=B->val+carry;
        temp->next=new ListNode(cal%10);
        carry=cal/10;
        temp=temp->next;
        
    }
    if(A)
     A=A->next;
    if(B)
     B=B->next;
}
if(carry==1)
    {
        temp->next=new ListNode(carry);
        temp=temp->next;
    }
    temp->next=NULL;
//C=Reverse(C);
return C;

}