Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  12. ListNode* res = NULL;
  13.  
  14. if (size(l1) < size(l2))
  15. res = add(l1, l2);
  16. else
  17. res = add(l2, l1);
  18.  
  19. return res;
  20. }
  21.  
  22. private:
  23.  
  24. /**
  25. * Input: A list
  26. * Output: size of the list
  27. */
  28. static int size(const ListNode *l) {
  29. int size = 0;
  30. while(l != NULL)
  31. ++size, l = l->next;
  32. return size;
  33. }
  34.  
  35. /**
  36. * Input: Two lists l1 and l2 with size(l1) <= size(l2)
  37. * Output: result list
  38. */
  39. ListNode* add(const ListNode *l1, const ListNode *l2) {
  40. ListNode *head, *l;
  41. register bool carry_over = false;
  42. int x = l1->val + l2->val + carry_over;
  43.  
  44. if (x > 9) {
  45. carry_over = true;
  46. x -= 10;
  47. }
  48. head = l = new ListNode(x);
  49. l1 = l1->next;
  50. l2 = l2->next;
  51.  
  52. while (l1 != NULL) {
  53. x = l1->val + l2->val + carry_over;
  54. if (x > 9) {
  55. carry_over = true;
  56. x -= 10;
  57. } else
  58. carry_over = false;
  59. l = l->next = new ListNode(x);
  60. l1 = l1->next;
  61. l2 = l2->next;
  62. }
  63.  
  64. while(l2 != NULL) {
  65. x = l2->val + carry_over;
  66. if (x > 9) {
  67. carry_over = true;
  68. x -= 10;
  69. } else
  70. carry_over = false;
  71. l = l->next = new ListNode(x);
  72. l2 = l2->next;
  73. }
  74.  
  75. if (carry_over)
  76. l->next = new ListNode(1);
  77.  
  78. return head;
  79. }
  80.  
  81. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement