2.两数相加
https://leetcode-cn.com/problems/add-two-numbers/
纯逻辑,代码未优化。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int t=0,flag=0;
ListNode* res=new ListNode(0);
ListNode* head=res;
while(l1!=nullptr&&l2!=nullptr){
t=l1->val+l2->val;
if(flag==1) t++;
ListNode* tmp=new ListNode(0);
if(t>=10){
tmp->val=t%10;
t=1;
flag=1;
}
else{
tmp->val=t;
flag=0;
}
head->next=tmp;
l1=l1->next;
l2=l2->next;
head=head->next;
}
if(l1==nullptr){
while(l2!=nullptr){
ListNode* tmp=new ListNode(0);
t=l2->val;
if(flag==1) t++;
if(t>=10){
tmp->val=t%10;
t=1;
flag=1;
}
else{
tmp->val=t;
flag=0;
}
head->next=tmp;
l2=l2->next;
head=head->next;
}
if(flag==1){
ListNode* tmp=new ListNode(0);
tmp->val=t;
head->next=tmp;
}
}
else if(l2==nullptr){
while(l1!=nullptr){
ListNode* tmp=new ListNode(0);
t=l1->val;
if(flag==1) t++;
if(t>=10){
tmp->val=t%10;
t=1;
flag=1;
}
else{
tmp->val=t;
flag=0;
}
head->next=tmp;
l1=l1->next;
head=head->next;
}
if(flag==1){
ListNode* tmp=new ListNode(0);
tmp->val=t;
head->next=tmp;
}
}
return res->next;
}
};
优化
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(0);
ListNode *res = head;
int cur=0,v1=0,v2=0;
while(l1||l2){
if(l1){v1=l1->val;l1=l1->next;}
else v1 = 0;
if(l2){v2=l2->val;l2=l2->next;}
else v2 = 0;
cur =v1+v2+cur/10;
res->next = new ListNode(cur%10);
res = res->next;
}
if(cur/10)res->next = new ListNode(cur/10);
return head->next;
}
};