LeetCode 2.Add Two Numbers

来源:互联网 发布:dota2淘宝买饰品安全吗 编辑:程序博客网 时间:2024/06/05 09:57
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;           }};

0 0
原创粉丝点击