Facebook
From Bulky Cat, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 62
  1. Node * addTwoLists(Node * first, Node * second) {
  2.   Node * res = NULL;
  3.   Node * temp;
  4.   Node * prev = NULL;
  5.   int carry = 0, sum = 0;
  6.   while (first != NULL || second != NULL) {
  7.     sum = carry;
  8.     sum += first != NULL ? first -> data : 0;
  9.     sum += second != NULL ? second -> data : 0;
  10.     if (sum >= 10) {
  11.       carry = 1;
  12.     } else {
  13.       carry = 0;
  14.     }
  15.     sum %= 10;
  16.     temp = newNode(sum);
  17.     if (res != NULL) {
  18.       prev -> next = temp;
  19.     } else {
  20.       res = temp;
  21.     }
  22.     prev = temp;
  23.     if (first) {
  24.       first = first -> next;
  25.     }
  26.     if (second) {
  27.       second = second -> next;
  28.     }
  29.   }
  30.  
  31.   if (carry > 0)
  32.     temp -> next = newNode(carry);
  33.   return res;
  34. }
  35.  
  36. Node * reverse(Node * head) {
  37.   if (head == NULL || head -> next == NULL) {
  38.     return head;
  39.   }
  40.   Node * rest = reverse(head -> next);
  41.   head -> next -> next = head;
  42.   head -> next = NULL;
  43.   return rest;
  44. }
  45.  
  46. Node * solve(Node * list1, Node * list2) {
  47.   list1 = reverse(list1);
  48.   list2 = reverse(list2);
  49.   Node * added = addTwoLists(list1, list2);
  50.   return added;
  51. }