给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 : 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1] 请用java代码回答该问题
时间: 2024-04-11 13:27:41 浏览: 67
可以使用递归的方式来实现链表相加的操作。
首先,创建一个新的链表用于存储结果。同时,创建一个辅助函数来处理递归过程。
在辅助函数中,首先处理递归的终止条件。如果两个链表都为空,并且没有进位值,则返回空。
然后,分别获得两个链表当前节点的值,并计算它们的和以及进位值。将和的个位数作为当前节点的值存储在新链表中,并更新进位值。
接着,递归调用函数处理两个链表的下一个节点,并将结果与进位值相加,得到最终的和。
最后,如果进位值仍然大于 0,则在新链表的末尾添加一个节点,节点值为进位值。
以下是 Java 代码实现:
```java
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
return addTwoNumbersHelper(l1, l2, 0);
}
private ListNode addTwoNumbersHelper(ListNode l1, ListNode l2, int carry) {
if (l1 == null && l2 == null && carry == 0) {
return null;
}
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int sum = x + y + carry;
ListNode newNode = new ListNode(sum % 10);
ListNode nextNode1 = (l1 != null) ? l1.next : null;
ListNode nextNode2 = (l2 != null) ? l2.next : null;
int newCarry = sum / 10;
ListNode nextNode = addTwoNumbersHelper(nextNode1, nextNode2, newCarry);
newNode.next = nextNode;
return newNode;
}
```
使用该函数,可以将两个链表 `[9,9,9,9,9,9,9]` 和 `[9,9,9,9]` 相加,得到结果 `[8,9,9,9,0,0,0,1]`。
阅读全文