给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
/**
依次遍历两个链表,只要有一个不为空就继续执行,遍历到第几位就把第几位的
值相加(当前节点的值和前一对接点的进位数),number保留进位数,终止条件
是当长的接点的下一个节点是空就返回,返回的时候要判断最后一个节点加上之
前的进位数是不是要往后进位,是的话要新建一个节点,最后再返回。
**/
ListNode l11 = l1;
ListNode l22 = l2;
int number=0;
int i = 0 , j = 0;
// 只要两个链表有一个不为空就继续执行
while(l11!=null || l22!=null){
if(l11==null && l22!=null){
number = number + l22.val;
l22.val = number%10;
number = (int)number/10;
i++;
if(l22.next==null && number==1){
ListNode last = new ListNode(number);
l22.next = last;
return l2;
}
l22 = l22.next;
System.out.print(number);
}
if(l11!=null && l22==null) {
number = number + l11.val;
l11.val = number%10;
number = (int)number/10;
if(l11.next==null && number==1){
ListNode last = new ListNode(number);
l11.next = last;
return l1;
}
l11=l11.next;
j++;
}
if(l11!=null && l22!=null) {
number = number + l11.val+ l22.val;
l11.val = number%10;
l22.val = number%10;
number = (int)number/10;
if(l11.next==null && l22.next==null && number==1){
ListNode last = new ListNode(number);
l11.next = last;
return l1;
}
l11 = l11.next;
l22 = l22.next;
}
}
return i>j? l2: l1;
}
}
复制代码