欢迎访问我的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); } };