给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
例如:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:题目里给的是各自的位数是按照逆序存储的,所以从低位开始相加,主要是要考虑进位,遍历到高位的时候要加上低位相加时产生的进位。 如果两个链表长度不一致,缺少的位就用0来补。
代码:
package code;
public class demo02 {
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
ListNode root = new ListNode(0);
ListNode temp = root;
int addNum = 0; //进位
int num1 = 0;
int num2 = 0;
while (l1 != null || l2 != null || addNum != 0){
num1 = l1 == null ? 0 : l1.value;
num2 = l2 == null ? 0 : l2.value;
int sum = num1 + num2 + addNum;
int sumNum = sum%10;
ListNode listNode = new ListNode(sumNum);
temp.next = listNode;
temp = temp.next;
addNum = sum/10;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
return root.next;
}
static class ListNode{
int value;
ListNode next ;
public ListNode(int value) {
this.value = value;
}
}
}