/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode node;
void reverse(node** ptr){
node *temp ,*p,*n;
temp = *ptr;
p = NULL;
while (temp != NULL) {
n = temp->next ;
temp->next = p;
p = temp;
temp = n;
}
*ptr = p;
}
node* addTwoNumbers(node* l1, node* l2){
node *head = NULL;
reverse(&l1);
reverse(&l2);
while(l1 || l2){
int carry = 0;
if(l1){
node *temp = (node*)malloc(sizeof(node)) ;
// temp->val = (l1->val + l2->val + carry) < 10 ? (l1->val + l2->val + carry) : (l1->val + l2->val + carry)/10 ;
int ran = l1->val + l2->val;
temp->val = (ran + carry) <= 10 ? (ran + carry)%10 : (ran + carry)/10 ;
carry = (ran + carry) >= 10 ? ( (ran + carry) == 10)?1:(ran+ carry)%10 : 0 ;
printf("%d %d \n",temp->val,carry );
}
if (l1->next) {
l1 = l1->next; }
if (l2->next){
l2 = l2->next;
}
if(!l1->next && !l2->next) break ;
}
return head;
}