lintcode-167. Add Two Numbers

欢迎访问我的lintcode题解目录https://blog.csdn.net/richenyunqi/article/details/80686719


非递归C++代码:

class Solution {
public:
    /**
     * @param l1: the first list
     * @param l2: the second list
     * @return: the sum list of l1 and l2 
     */
    ListNode * addLists(ListNode * l1, ListNode * l2) {
        // write your code here
        ListNode*l3=new ListNode(0),*p=l3;//为新链表l3建立一个头结点
        int carry=0,t=(l1==nullptr?0:l1->val)+(l2==nullptr?0:l2->val);//carry为i进位,t为和
        for(ListNode*p=l3;l1!=nullptr||l2!=nullptr||carry>0;p=p->next){//l1是空、l2是空且无进位时才能退出循环
            p->next=new ListNode(t%10);//为新链表新建结点
            carry=t/10;//刷新进位
            l1=l1==nullptr?l1:l1->next;
            l2=l2==nullptr?l2:l2->next;
            t=(l1==nullptr?0:l1->val)+(l2==nullptr?0:l2->val)+carry;
        }
        return l3->next;//题目要求的链表均为无头结点链表,需要返回l3的next指针作为新链表头指针
    }
};

递归C++代码:

class Solution {
public:
    /**
     * @param l1: the first list
     * @param l2: the second list
     * @return: the sum list of l1 and l2 
     */
    ListNode* add(ListNode*l1,ListNode*l2,int carry){
        if(l1==nullptr&&l2==nullptr&&carry==0)
            return nullptr;
        int sum=(l1==nullptr?0:l1->val)+(l2==nullptr?0:l2->val)+carry;
        ListNode*p=new ListNode(sum%10);
        p->next=add(l1==nullptr?l1:l1->next,l2==nullptr?l2:l2->next,sum/10);
        return p;
    }
    ListNode * addLists(ListNode * l1, ListNode * l2) {
        // write your code here
        return add(l1,l2,0);
    }
};

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/80693666