LeetCode 2.Add Two Numbers

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *p=l1;
        ListNode *q=l2;
        ListNode *r=new ListNode(0);
        ListNode *head=r;
        int add=0;
        bool first=false; //第一个非零节点是否构造
        if(p!=NULL && q!=NULL)
       {
            for(;p!=NULL && q!=NULL;p=p->next,q=q->next)
        {
            ListNode *tail=new ListNode(0);
            tail->val=p->val + q->val+add;//计算当前节点的数值
            if(tail->val >= 10)//如果当前数值大于10,向后进位1
            {
                tail->val = tail->val - 10;
                add=1;//进位数值
                 r->next=tail;
                    r=tail;
             }
            else       //当前节点数值小于10,进位0,判断是否创建了第一个节点
            {
                add=0;
                 r->next=tail;
                    r=tail;
            }
            
        }
       }
        while(p!=NULL)
        {
            ListNode *tail=new ListNode(0);
            tail->val=p->val+add;
            if(tail->val>=10)
            {
                add=1;
                tail->val=tail->val-10;
            }else{
                add=0;
            }
            r->next=tail;
            r=tail;
            p=p->next;
        }
        
        while(q!=NULL)
        {
             ListNode *tail=new ListNode(0);
             tail->val=q->val+add;
            if(tail->val >= 10)
            {
                add=1;
                tail->val=tail->val-10;
            }else{
                add=0;
            }
          
           r->next=tail;
            r=tail;
            q=q->next;
        }
        
        if(add==1)  //如果最后节点扫描完后,进位为1
       { ListNode *tail=new ListNode(1);
        r->next=tail;
       }
        
        head=head->next; //去掉原始新建的r节点
        return head;
       
    }
};

你可能感兴趣的:(Algorithm,LeetCode)