#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode *l3 = NULL;
ListNode *l3Tail = NULL;
int sum = 0;
int carryFlag = 0;
int current = 0;
if (l1 == NULL) {
return l2;
}
if (l2 == NULL) {
return l1;
}
while (l1 != NULL || l2 != NULL) {
sum = carryFlag;
if (l1 != NULL) {
sum = sum + l1->val;
l1 = l1->next;
}
if (l2 != NULL) {
sum = sum + l2->val;
l2 = l2->next;
}
carryFlag = sum / 10;
current = sum % 10;
ListNode * temp = new ListNode(current);
temp->next = NULL;
if(l3 == NULL) {
l3 = temp;
l3Tail = temp;
} else {
l3Tail->next = temp;
l3Tail = l3Tail->next;
}
}
if (carryFlag != 0) {
ListNode *temp = new ListNode(carryFlag);
temp->next = NULL;
l3Tail->next = temp;
l3Tail = l3Tail->next;
}
return l3;
}
ListNode *initLinkList(int array[], int length) {
ListNode *head = NULL;
ListNode *tail = NULL;
int i =0 ;
for(i = 0; i < length; i++) {
ListNode * temp = new ListNode(array[i]);
// temp->val = array[i];
// temp->next = NULL;
if(i == 0) {
head = temp;
tail = temp;
} else {
tail->next = temp;
tail = tail -> next;
}
// cout<<"tail->val:"<<tail->val<<endl;
}
return head;
}
void print(ListNode *link) {
ListNode *tail = NULL;
tail = link;
while(tail){
cout<<tail->val;
if (tail->next) {
cout<<"->";
}
tail = tail->next;
}
cout<<endl;
}
};
int main(){
Solution solution;
int array1[3]={2, 4, 3};
int array2[4]={5, 6, 7,8};
// ListNode *L1;
// ListNode *L2;
ListNode *L1 = solution.initLinkList(array1, 3);
ListNode *L2 = solution.initLinkList(array2, 4);
solution.print(L1);
solution.print(L2);
ListNode *L3 = solution.addTwoNumbers(L1, L2);
solution.print(L3);
return 1;
}