题目:
暴力方法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l=new ListNode();//结果
ListNode* trace=l;
int addMod=0;
while(l1 && l2){//同时有值条件
int tempSumValue=l1->val+l2->val+addMod;//直接相加
int tempVal=tempSumValue%10;
ListNode* l3=new ListNode(tempVal);
trace->next=l3;
trace=trace->next;
addMod=tempSumValue/10;//进位
l1=l1->next;
l2=l2->next;
}
while(l1 || l2){//其中有一个有值条件
int tempSumValue;
if(l1){
tempSumValue=l1->val+addMod;//进位相加
l1=l1->next;
}
else{
tempSumValue=l2->val+addMod;//进位直接相加
l2=l2->next;
}
int tempVal=tempSumValue%10;
ListNode* l3=new ListNode(tempVal);
trace->next=l3;
trace=trace->next;
addMod=tempSumValue/10;//进位
}
if(addMod==1){//多出最长的一位数
ListNode* l3=new ListNode(1);
trace->next=l3;
}
trace=l->next;
delete l1,l2;
return trace;
}
};
优化方法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l=new ListNode();//结果
ListNode* trace=l;
int addMod=0;
while(l1 || l2){//至少有一个有值条件
int tempSumValue;
if(l1 && l2){
tempSumValue=l1->val+l2->val+addMod;//进位相加
trace->next=l1;
l1=l1->next;
l2=l2->next;
}
else if(l1){
tempSumValue=l1->val+addMod;//进位相加
trace->next=l1;
l1=l1->next;
}
else{
trace->next=l2;
tempSumValue=l2->val+addMod;//进位直接相加
l2=l2->next;
}
int tempVal=tempSumValue%10;
trace=trace->next;
trace->val=tempVal;
addMod=tempSumValue/10;//进位
}
if(addMod==1){//多出最长的一位数
ListNode* l3=new ListNode(1);
trace->next=l3;
}
trace=l;
l=l->next;
delete trace;
return l;
}
};