题目:
暴力方法:
/*** 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;}
};