2_AddTwoNumbers - a920604a/leetcode GitHub Wiki
title: 2. Add Two Numbers
tags:
- Linked List
categories: leetcode
comments: false
solution
option 1 - iterative
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* ret = new ListNode(-1), *ans = ret;
int carry = 0;
while(l1 || l2 || carry){
int sum = carry;
if(l1){
sum+=l1->val;
l1=l1->next;
}
if(l2){
sum+=l2->val;
l2=l2->next;
}
ret->next = new ListNode(sum%10);
ret = ret->next;
carry = sum/10;
}
return ans->next;
}
};
option 2 - recursive
class Solution {
public:
ListNode* addTwo(ListNode* l1, ListNode*l2, int carry){
if(!l1 && !l2 && carry == 0) return nullptr;
ListNode * node;
if(l1 || l2 || carry){
int sum = carry;
if(l1){
sum+=l1->val;
l1=l1->next;
}
if(l2){
sum+=l2->val;
l2=l2->next;
}
node = new ListNode(sum%10);
sum/=10;
node->next = addTwo(l1, l2, sum);
}
return node;
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *ret = new ListNode(-1);
ret->next = addTwo(l1, l2, 0);
return ret->next;
}
};
analysis
- option 1
- time complexity
O(n)
- space complexity
O(1)
- option 2
- time complexity
O(n)
- space complexity
O(n)
function call