
/**
* 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) {
vector<int> tmp1;
vector<int> tmp2;
while(l1){
tmp1.push_back(l1->val);
l1 = l1->next;
}
while(l2){
tmp2.push_back(l2->val);
l2 = l2->next;
}
int i = tmp1.size()-1;
int j = tmp2.size()-1;
int sum = 0;
int cur = 0;
int res = 0;
vector<int> vec;
while(i>=0||j>=0){
cout<<"i:"<<i<<" j: "<<j<<endl;
if(i<0)
sum = tmp2[j];
else if(j<0)
sum = tmp1[i];
else
sum = tmp1[i]+tmp2[j];
cur = (sum+res)%10;
res = (sum+res)/10;
vec.push_back(cur);
i--;
j--;
}
if(res>0) // 如果最后还有进位
vec.push_back(res);
ListNode* H = new ListNode();
ListNode* L = H;
for(int i = vec.size()-1; i >= 0; i--){
ListNode* tmp = new ListNode(vec[i]);
L->next = tmp;
L = L->next;
}
return H->next;
}
};