class Solution {
int a=0;//记录加数
ListNode* l3=new ListNode;//用来返回最终结果
ListNode* ls=new ListNode;//如果两列表不等用来保存余下的数组
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* p=l3;//用于递归返回
l3->val=(l1->val+l2->val+a)%10;
if(l1->val+l2->val+a>=10){
a=1;
}else{
a=0;
}
if(l1->next!=nullptr&&l2->next!=nullptr){
l3->next=new ListNode;
l3=l3->next;
addTwoNumbers(l1->next,l2->next);
}
else if(l1->next==nullptr&&l2->next!=nullptr){
l3->next=addOne(l2->next);
}
else if(l1->next!=nullptr&&l2->next==nullptr){
l3->next=addOne(l1->next);
}
else if(l1->next==nullptr&&l2->next==nullptr){
if(a==1){
l3->next=new ListNode;
l3->next->val=1;
}
return p;
}
return p;
}
public:
ListNode* addOne(ListNode* l){
ListNode*p=ls;
ls->val=(l->val+a)%10;
if(l->val+a>=10){
a=1;
}else{
a=0;
}
if(l->next!=nullptr){
ls->next=new ListNode;
ls=ls->next;
ls=addOne(l->next);
}else{
if(a==1){
ls->next=new ListNode;
ls->next->val=1;
}
}
return p;
}
};
改进:
讲原来存储l3的用l1和l2两者中最大的一个存储
class Solution {
int a=0;
ListNode* ls=new ListNode;
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l3=new ListNode;
if(check(l1,l2)==2){
l3=NaddTwoNumbers(l2,l1);
}else{
l3=NaddTwoNumbers(l1,l2);
}
return l3;
}
public:
ListNode* NaddTwoNumbers(ListNode* l1, ListNode* l2){
ListNode* p=l1;
int m=l1->val;
l1->val=(m+l2->val+a)%10;
if(m+l2->val+a>=10){
a=1;
}else{
a=0;
}
if(l1->next!=nullptr&&l2->next!=nullptr){
NaddTwoNumbers(l1->next,l2->next);
}
else if(l1->next==nullptr&&l2->next!=nullptr){
l1->next=addOne(l2->next);
}
else if(l1->next!=nullptr&&l2->next==nullptr){
l1->next=addOne(l1->next);
}
else if(l1->next==nullptr&&l2->next==nullptr){
if(a==1){
l1->next=new ListNode;
l1->next->val=1;
}
return p;
}
return p;
}
public:
int check(ListNode* l1, ListNode* l2){
if(l1->next!=nullptr&&l2->next!=nullptr) check(l1->next,l2->next);
if(l1->next!=nullptr&&l2->next ==nullptr) return 1;
if(l1->next==nullptr&&l2->next!=nullptr) return 2;
if(l1->next==nullptr&&l2->next ==nullptr) return 1;
return 1;
}
public:
ListNode* addOne(ListNode* l){5
ListNode*p=ls;
ls->val=(l->val+a)%10;
if(l->val+a>=10){
a=1;
}else{
a=0;
}
if(l->next!=nullptr){
ls->next=new ListNode;
ls=ls->next;
ls=addOne(l->next);
}else{
if(a==1){
ls->next=new ListNode;
ls->next->val=1;
}
}
return p;
}
};