给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807
时间: 2023-08-22 21:55:16 浏览: 131
为了将两个逆序存储的链表表示的数相加,我们可以使用一个进位变量来跟踪进位,并从头到尾遍历两个链表的每个节点。将对应位置上的数字相加,并将进位加上。然后创建一个新节点来保存和的个位数,并更新进位值。最后返回新链表的头节点。
以下是相应的 Java 代码实现:
```java
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0); // 创建一个虚拟头节点
ListNode current = dummyHead; // 用于遍历链表
int carry = 0; // 进位值
while (l1 != null || l2 != null) {
int num1 = (l1 != null) ? l1.val : 0; // 获取链表1当前节点的值
int num2 = (l2 != null) ? l2.val : 0; // 获取链表2当前节点的值
int sum = num1 + num2 + carry; // 计算当前位置上的和
carry = sum / 10; // 更新进位值
current.next = new ListNode(sum % 10); // 创建新节点保存和的个位数
current = current.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry > 0) {
current.next = new ListNode(carry); // 如果最后还有进位,创建新节点保存进位值
}
return dummyHead.next; // 返回新链表的头节点
}
```
在给定示例中,链表 l1 表示数字 342,链表 l2 表示数字 465。将两个数相加得到 807,所以返回的链表应该表示数字 807,即 `[7, 0, 8]`。
阅读全文