题目中说reverse,我还以为是链表首先要倒置。。。而且样例中,倒置后计算似乎结果并没有什么变化。。。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool end(ListNode *l1 , ListNode *l2){
return (l1==NULL)&(l2==NULL);
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *l1r=l1,*l2r=l2;
ListNode *first,*last,*middle;
/*
first = l1;
last = NULL;
while(first!=NULL){
middle = first;
first = first->next;
middle->next = last;
last = middle;
}
l1r = last;
first = l2;
last = NULL;
while(first!=NULL){
middle = first;
first = first->next;
middle->next = last;
last = middle;
}
l2r = last;
*/
ListNode *ans;
int add = 0;
if( !end(l1r,l2r) ){
last = (ListNode*)malloc(sizeof(ListNode));
int v1 = (l1r==NULL)?0:l1r->val;
int v2 = (l2r==NULL)?0:l2r->val;
last->val = v1 + v2 + add;
if(last->val>=10){
last->val = last->val % 10;
add = 1;
}else{
add = 0;
}
if(l1r!=NULL)
l1r = l1r->next;
if(l2r!=NULL)
l2r = l2r->next;
last->next= NULL;
}
ans = last;
while( !end(l1r,l2r) || add ){
last->next = (ListNode*)malloc(sizeof(ListNode));
last = last->next;
int v1 = (l1r==NULL)?0:l1r->val;
int v2 = (l2r==NULL)?0:l2r->val;
last->val = v1 + v2 + add;
if(last->val>=10){
last->val = last->val % 10;
add = 1;
}else{
add = 0;
}
if(l1r!=NULL)
l1r = l1r->next;
if(l2r!=NULL)
l2r = l2r->next;
last->next = NULL;
}
last->next = NULL;
return ans;
}
};