#### 题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
#### 输出实例:
```txt
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
```
#### 思路:
- 将链表L1 、L2的和 存到链表L1中;
- L1不为空且L2为空或两者都为空,就返回L1;
- L2不为空且L1为空,就返回L2;
- 两者都不为空,就将它们按位相加。这其中最重要的就是进位问题,进位可以等价理解为将上一位的进的1加到后续节点上,可能会有连续2次进位,如进1后 加的下一位是9 ,那还得进一次。
#### 代码:
```java
public class AddTwoNumbers {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if (l2 == null) { // 若l2为空或l1,l2都为空,则返回l1
return l1;
} else if (l1 == null && l2 != null) { // 若l1为空,l2不为空,则返回l2
return l2;
} else {
l1.value = l1.value + l2.value; // 链表的节点值相加
carry(l1); // 进位操作
l1.next = addTwoNumbers(l1.next, l2.next); // 递归操作
return l1;
}
}
public void carry(ListNode node) {
if (node.value > 9) {
if (node.next == null) {
node.next = new ListNode(node.value / 10);
} else {
node.next.value += node.value / 10;
carry(node.next);
}
node.value %= 10;
}
}
}
```
```java
//定义单链表
public class ListNode {
int value;
ListNode next;
ListNode(int value){
this.value=value;
}
}
```

两数相加