给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
- 思路:1、新建一个新的链表存放两个链表l1,l2元素相加,while循环直到链表元素都为空。
-
2、两个链表同位元素相加,要判断是否大于10,如果大于10,链表下一个元素加完要++。所以要定义一个判断flag标记
-
3、如果链表末尾元素相加超过10,需要重新new一个节点出来。需要用carry标记,如果是true末尾要新增节点
*/
```java
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode newHead=new ListNode(-1);
ListNode h=newHead;
boolean flag=false; //是否有进位标记
int sum;
while(l1!=null || l2!=null){
sum=0;
if(l1!=null){
sum+=l1.val;
l1=l1.next;
}
if(l2!=null){
sum+=l2.val;
l2=l2.next;
}
if(flag){ //判断链表前位元素是否有进位,有进位+1。
sum++;
flag=false;
}
h.next=new ListNode(sum%10);
h=h.next;
if(sum>9){
flag=true;
}
}
if(flag){
h.next=new ListNode(1);
}
return newHead.next;
}