How can this code return right answer?


#1

/**

  • Definition for singly-linked list.

  • struct ListNode {

  • int val;
    
  • ListNode *next;
    
  • ListNode(int x) : val(x), next(NULL) {}
    
  • };
    /
    ListNode
    Solution::addTwoNumbers(ListNode* A, ListNode* B) {

    ListNode* tempB=B;
    ListNode* tempA=A;
    int carry=0;
    int countA=0;
    int countB=0;
    while(tempA!=NULL && tempB!=NULL){
    countA++;
    countB++;
    tempA=tempA->next;
    tempB=tempB->next;
    }
    if(tempA!=NULL){
    tempA=A;
    tempB=B;
    while(tempA!=NULL && tempB!=NULL){
    int t=0;
    t=(tempA->val+tempB->val+carry)%10;
    carry=(tempA->val+tempB->val+carry)/10;
    tempA->val=t;
    if(carry!=0 && tempA->next==NULL){
    (tempA->next)=new ListNode(carry-1);
    }
    tempA=tempA->next;
    tempB=tempB->next;
    }
    while(tempA!=NULL){
    int t=0;
    t=(tempA->val+carry)%10;
    carry=(tempA->val+carry)/10;
    tempA->val=t;
    if(carry!=0 && tempA->next==NULL){
    (tempA->next)=new ListNode(carry-1);
    }
    tempA=tempA->next;
    }

     return A;
    

    }
    else{
    tempA=A;
    tempB=B;
    while(tempA!=NULL && tempB!=NULL){
    int t=0;
    t=(tempA->val+tempB->val+carry)%10;
    carry=(tempA->val+tempB->val+carry)/10;
    tempB->val=t;
    if(carry!=0 && tempB->next==NULL){

         (tempB->next)=new ListNode(carry-1);
     }
     tempA=tempA->next;
     tempB=tempB->next;
      }
     while(tempB!=NULL){
         int t=0;
     t=(tempB->val+carry)%10;
     carry=(tempB->val+carry)/10;
     tempB->val=t;
     
      if(carry!=0 && tempB->next==NULL){
         (tempB->next)=new ListNode(carry-1);
     }
     tempB=tempB->next;
     }
    
     return B;
    

    }

}