---
# System prepended metadata

title: Leetcode 2. Add Two Numbers
tags: [Leetcode(C++)]

---

# Leetcode 2. Add Two Numbers
###### tags: `Leetcode(C++)`

題目 : https://leetcode.com/problems/add-two-numbers/ 。

想法 : 把L2直接加在L1上面，如果長度上L2如果比較長，那L1要新增新的節點去儲存L2的值，最後還要注意有沒有進位。

時間複雜度 : 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 *ans=l1,*tmp=new(ListNode);
        int borrow=0;
        
        while(l2 != nullptr){
            if(l1 == nullptr){
                l1=new(ListNode);
                tmp->next=l1;
            }
            
            cout << l1->val << " " << l2->val << endl;
            
            l1->val=l1->val+l2->val+borrow;
            if(l1->val >= 10) l1->val%=10,borrow=1;
            else borrow=0;
            
            tmp=l1; l1=l1->next; l2=l2->next;
        }
        
        while(l1!=nullptr){
            l1->val=l1->val+borrow;
            if(l1->val >= 10) l1->val%=10,borrow=1;
            else borrow=0;
            
            cout << l1->val << endl;
            
            tmp=l1; l1=l1->next; 
        }
        
        if(borrow == 1){
            l1=new(ListNode);
            l1->val=1;
            tmp->next=l1;
        }
        
        return ans;
    }
};
```