Leetcode:2. 兩數相加(C++帶詳細註釋)

Axe濤發表於2020-10-11

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;
        
    }
};

相關文章