adding two numbers

Run Settings
LanguageC
Language Version
Run Command
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode node; void insertion(node**head,node*list){ node *t = *head ; if(!t){ *head = list; return ; } while(t->next) t = t->next; t->next = list ; return ; } 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* operation(int a, int b,int*c){ node *temp = (node*)malloc(sizeof(node)) ; int ran = a + b; temp->val = (ran + *c) <= 10 ? (ran + *c)%10 : (ran + *c) - 10 ; temp->next = NULL; *c = (ran + *c) >= 10 ? 1: 0; // printf("%d %d\n",temp->val,ran ); return temp ; } node* addTwoNumbers(node* l1, node* l2){ node *head = NULL; // reverse(&l1); // reverse(&l2); int carry = 0; while(l1 || l2){ if(l1 && l2){ node *temp = operation(l1->val, l2->val,&carry) ; insertion(&head,temp); }else{ if(l1){ node *temp = operation(l1->val, 0,&carry) ; insertion(&head,temp); }else{ node *temp = operation(0, l2->val,&carry) ; insertion(&head,temp); } } if (l1) { l1 = l1->next; } if (l2){ l2 = l2->next; } } if(carry == 1){ node *temp = operation(0, 0 ,&carry) ; insertion(&head,temp); } return head; }
Editor Settings
Theme
Key bindings
Full width
Lines