Time complexity: O(N)
| /** | |
| * Definition for singly-linked list. | |
| * struct ListNode { | |
| * int val; | |
| * ListNode *next; | |
| * ListNode() : val(0), next(nullptr) {} | |
| * ListNode(int x) : val(x), next(nullptr) {} | |
| * ListNode(int x, ListNode *next) : val(x), next(next) {} | |
| * }; | |
| */ | |
| class Solution { | |
| public: | |
| ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { | |
| ListNode* root = new ListNode(0); | |
| ListNode* ret = root; | |
| int carry = 0; | |
| while(l1 or l2){ | |
| int sum = carry; | |
| if(l1){ | |
| sum+= l1->val; | |
| l1=l1->next; | |
| } | |
| if(l2){ | |
| sum+= l2->val; | |
| l2=l2->next; | |
| } | |
| carry = sum / 10; | |
| sum = sum % 10; | |
| ret->next = new ListNode(sum); | |
| ret = ret->next; | |
| } | |
| while(l1){ | |
| int sum = carry + l1->val; | |
| l1=l1->next; | |
| carry = sum / 10; | |
| sum = sum % 10; | |
| ret->next = new ListNode(sum); | |
| ret = ret->next; | |
| } | |
| while(l2){ | |
| int sum = carry + l2->val; | |
| l2=l2->next; | |
| carry = sum / 10; | |
| sum = sum % 10; | |
| ret->next = new ListNode(sum); | |
| ret = ret->next; | |
| } | |
| if(carry){ | |
| ret->next = new ListNode(carry); | |
| ret = ret->next; | |
| } | |
| return root->next; | |
| } | |
| }; |
No comments:
Post a Comment