/**
* ref:https://leetcode-cn.com/problems/add-two-numbers/
* 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
* 请你将两个数相加,并以相同形式返回一个表示和的链表。
* 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
* 示例:
* 输入:l1 = [2,4,3], l2 = [5,6,4]
* 输出:[7,0,8]
* 解释:342 + 465 = 807
**/
public class AddTwoNumbers {
public static void main(String[] args){
// 构造node1
ListNode node13 = new ListNode(3,null)
ListNode node12 = new ListNode(4,node13)
ListNode node1 = new ListNode(2,node12)
// 构造node2
ListNode node23 = new ListNode(4,null)
ListNode node22 = new ListNode(6,node23)
ListNode node2 = new ListNode(5,node22)
// 输出
System.out.println("node1:"+node1)
System.out.println("node2:"+node2)
System.out.println("sumNode:"+addTwoNumbers(node1,node2))
}
/**
* 从前向后迭代两个链表的数据,直到都为空时,结束。
* 迭代时候,对两个链表元素求和,并加上上次进位值,如果值大于9,则需要记录新的进位值。
* 最后将结果对10取模赋值给新的链表,迭代一轮,链表移位一次,新链表的next位置记录一次值。
* @param node1
* @param node2
* @return
*/
public static ListNode addTwoNumbers(ListNode node1, ListNode node2){
ListNode sumNode = new ListNode(0)
// 用于记录进位值,默认无进位值为0
int sumNext = 0
ListNode current = sumNode
while(node1!=null||node2!=null){
// 计算两个元素的和
int sum = sumNext + (node1==null?0:node1.val) + (node1==null?0:node2.val)
// 计算进位值,如果值大于9,则除以10进行进位
sumNext = sum/10
// 指针继续移动
if(node1!=null){
node1 = node1.next
}
if(node2!=null){
node2 = node2.next
}
// 计算结果的指针移动
sumNode.next = new ListNode(sum%10,null)
sumNode = sumNode.next
}
// 如果最后链表的数字加完还有进位的话,那么还需要额外再创建出一个节点
if (sumNext > 0) {
current.next = new ListNode(sumNext)
}
// 跳过初始化时使用的首节点0
return current.next
}
}