Demo02:
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。
示例:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
链表:
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
我的思路:
从末位开始相加, 得到新链表的末位值, 如果相加大于10, 就会有一个进位
再将其两子节点递归掉用此方法
具体代码实现:
package test;
/**
* 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
* 请你将两个数相加,并以相同形式返回一个表示和的链表。
*
* @author 欧阳
* @date 2022/3/4
*/
public class Demo02 {
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//其中一个节点为空直接返回另一节点
if (l1 == null) return l2;
if (l2 == null) return l1;
//末位相加
int val = l1.val + l2.val;
//将各自的下一子节点递归调用此方法
ListNode next = addTwoNumbers(l1.next, l2.next);
//末位相加大于等于10需进位
if (val >= 10) {
val -= 10;
//递归调用每次子节点和进位和
next = addTwoNumbers(next, new ListNode(1));
}
return new ListNode(val, next);
}
}