Leetcode:2. 両数加算(C++詳細コメント付き)

9108 ワード

Leetcode:2. 両数加算(C++詳細コメント付き)
/**
 * 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) {
     
         ListNode* l3=new ListNode;//            
         ListNode*l4=l3;//      ,    
         int m=0;//   
         while(l1!=nullptr||l2!=nullptr)//l1 l2     
         {
     
             if(l1!=nullptr&&l2!=nullptr)//   
             {
     
              l3->val=(l1->val+l2->val+m)%10;//   
              m=(l1->val+l2->val+m)/10;//   
              l1=l1->next;//    
              l2=l2->next;

             }
             else if(l1!=nullptr)//l1  ,l2 
             {
     
                 l3->val=(l1->val+m)%10;//   
                  m=(l1->val+m)/10;//   
                 l1=l1->next;//    

             }
             else if(l2!=nullptr)//l1 ,l2  
             {
     
                 l3->val=(l2->val+m)%10;
                 m=(l2->val+m)/10;

                 l2=l2->next;

             }
            
            
             if(l1!=nullptr||l2!=nullptr)//    l1,l2   ,       l3  
             {
     
                 l3->next=new ListNode;
                 l3=l3->next;
             }
             else //          ,             
             {
                    
                if(m>0) 
                {
        
                   l3->next=new ListNode(m);

                }
             }
         }
         
         return l4;
        
    }
};