---
tags: LeetCode
---
# 2. Add Two Numbers (Medium)
You are given two **non-empty** linked lists representing two non-negative integers. The digits are **stored in reverse order** and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do **not contain any leading zero**, except the number 0 itself.
Example:
```
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
```
---
輸入範本如下
```C#
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
}
}
```
### 直覺想法
跟字串相加的題目[415. Add Strings](https://hackmd.io/7bHRBu0JQjGZ_k_psqaJEg?view#415-Add-Strings)很類似 , 只是儲存實體改成 LinkList 而已 , 把 code 複製過來改就好 , 算簡單的.
反正核心概念就一個一個加 , 需要紀錄 carry , 以及需要多一個 LinkList 的操作.
```C#
92 ms 27.6 MB
You are here!
Your runtime beats 99.85 % of csharp submissions.
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
ListNode listNode = new ListNode(-1); // init & 指向初始位置.
ListNode point = listNode; // 使用 point 指向目前 listNode 計算的位置
int carry = 0;
while (l1 != null || l2 != null || carry == 1) // 當 l1 or l2 未走訪完 , 或是尚有進位數字 carry 則繼續計算.
{
int sum = carry;
if (l1 != null) sum += l1.val;
if (l2 != null) sum += l2.val;
point.next = new ListNode(sum % 10);
point = point.next;
carry = sum >= 10 ? 1 : 0;
l1 = l1?.next; // 若 l1 為 null 則回傳 null
l2 = l2?.next; // 若 l2 為 null 則回傳 null
}
return listNode.next;
}
```
### Thank you!
You can find me on
- [GitHub](https://github.com/s0920832252)
- [Facebook](https://www.facebook.com/fourtune.chen)
若有謬誤 , 煩請告知 , 新手發帖請多包涵
# :100: :muscle: :tada: :sheep: