#include <stdlib.h>
#include <stdio.h>
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
int debug = 0;
struct ListNode* cur1 = l1;
struct ListNode* cur2 = l2;
struct ListNode* l3 = malloc(sizeof(struct ListNode));
l3->val = 0;
l3->next = NULL;
struct ListNode* tmp = l3;
struct ListNode* cur3 = l3;
int v1 = 0, v2 = 0, v3 = 0;
int carry = 0, first = 1;
while(cur1 != NULL || cur2 != NULL) {
v1 = (cur1 == NULL ? 0 : cur1->val);
v2 = (cur2 == NULL ? 0 : cur2->val);
v3 = v1 + v2;
if (carry == 1) {
v3 += 1;
carry = 0;
}
if(v3 > 9) {
carry = 1;
v3 -= 10;
}
tmp = malloc(sizeof(struct ListNode));
tmp->val = v3;
tmp->next = NULL;
if(first == 1) {
l3 = tmp;
cur3 = l3;
first = 0;
if (debug == 1) printf("tmp->val = %d\n", tmp->val);
} else {
cur3->next = tmp;
cur3 = cur3->next;
if (debug == 1) printf("tmp->val = %d\n", tmp->val);
}
if (debug == 1) printf("v1 = %d, v2 = %d, v3 = %d\n", v1, v2, v3);
if (cur1 != NULL) cur1 = cur1->next;
if (cur2 != NULL) cur2 = cur2->next;
}
if (carry == 1) {
tmp = malloc(sizeof(struct ListNode));
tmp->val = 1;
tmp->next = NULL;
cur3->next = tmp;
carry = 0;
}
return l3;
}
int main() {
struct ListNode* l1 = malloc(sizeof(struct ListNode));
struct ListNode* l2 = malloc(sizeof(struct ListNode));
struct ListNode* l3 = malloc(sizeof(struct ListNode));
struct ListNode* tmp1 = malloc(sizeof(struct ListNode));
struct ListNode* tmp2 = malloc(sizeof(struct ListNode));
struct ListNode* tmp3 = malloc(sizeof(struct ListNode));
// tmp3->val = 3;
// tmp3->next = NULL;
// tmp2->val = 4;
// tmp2->next = tmp3;
// tmp1->val = 2;
// tmp1->next = tmp2;
tmp2->val = 8;
tmp2->next = NULL;
tmp1->val = 1;
tmp1->next = tmp2;
l1 = tmp1;
tmp1 = malloc(sizeof(struct ListNode));
tmp2 = malloc(sizeof(struct ListNode));
tmp3 = malloc(sizeof(struct ListNode));
// tmp3->val = 4;
// tmp3->next = NULL;
// tmp2->val = 6;
// tmp2->next = tmp3;
// tmp1->val = 5;
// tmp1->next = tmp2;
tmp1->val = 0;
tmp1->next = NULL;
l2 = tmp1;
l3 = addTwoNumbers(l1, l2);
printf("%d", l3->val);
while(l3->next != NULL) {
l3 = l3->next;
printf(" -> %d", l3->val);
}
printf("\n");
return 0;
}