问题描述: 给定两个非空的链表,表示两个非负的整数。链表中的每个节点都包含一个0-9的数字,数字按照逆序的方式存储,并且每个节点只能存储一位数字。将这两个链表相加,并且返回一个新的链表。
示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 解释:342 + 465 = 807
解答: 这个问题可以通过模拟加法的方式来解决。我们可以创建一个新的链表,然后从头开始遍历两个输入链表,将对应位置的数字相加,并且考虑进位。具体的步骤如下:
这个问题可以使用Java语言来实现,以下是一个示例代码:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while (l1 != null || l2 != null) {
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummy.next;
}
}
在这个解法中,我们使用了一个虚拟头节点(dummy)来简化代码。通过遍历两个输入链表,我们可以将对应位置的数字相加,并且考虑进位。最后,我们返回结果链表的下一个节点,即为最终的结果。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云