题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
示例2
输入:l1 = [0], l2 = [0] 输出:[0]
示例3
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]
1.首先构建一条新的链表的首节点root
2.然后声明一个变量在移动过程中指向当前节点
3.定义一个整型carry
4.while语句判断l1,l2首节点是否都为空
5.三元表达式若l1,l2首节点不为空则令x,y等于l1.val,l2.val
6.定义整形sum为两节点和
7.sum/10取模,当x+y有进位时存入carry
8.生成下一个节点
9.移动指针指向下一个值
10.把新的节点连接起来
11.当前节点向后移动
12.将节点向后移动,对l1的下一个节点进行处理
13.将节点向后移动,对l2的下一个节点进行处理
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode root = new ListNode(0); // 1
ListNode newList = root; // 2
int carry = 0; // 3
while(l1 != null || l2 != null){ // 4
int x = l1 != null ? l1.val:0; //5
int y = l2 != null ? l2.val:0;
int sum = x + y + carry; //6
carry = sum / 10; //7
ListNode sumNode = new ListNode(sum % 10); //8
newList.next = sumNode; //9,10
newList = newList.next; //11
if(l1 != null){
l1 = l1.next; //12
}
if(l2 != null){ //13
l2 = l2.next;
}
}
if(carry > 0){
newList.next = new ListNode(carry);
}
return root.next;
}
}