import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* @两数相加
* @description leetcode https://leetcode.cn/problems/add-two-numbers/description/
* author zzw
* version 1.0.0
* create 2024/10/9 22:58
**/
public class AddTwoNumbers {
/**
* 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
* 请你将两个数相加,并以相同形式返回一个表示和的链表。
* 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
* 示例 1:
* 输入:l1 = [2,4,3], l2 = [5,6,4]
* 输出:[7,0,8]
* 解释:342 + 465 = 807.
* <p>
* 示例 2:
* 输入:l1 = [0], l2 = [0]
* 输出:[0]
* <p>
* 示例 3:
* 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
* 输出:[8,9,9,9,0,0,0,1]
*
* @param l1 代表数字1的链表
* @param l2 代表数字1的链表
* @return 数字相加后的链表
*/
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 1.计算结果所在链表的头节点
ListNode firstNode = null;
// 2.结果链表存放正在计算的节点
ListNode currentNode = null;
// 2.计算的进位
int carry = 0;
while (l1 != null && l2 != null) {
// 将l1、l2、进位的数进行相加
int sum = l1.val + l2.val + carry;
// 相加结果对10取余,算出当前节点的值
int currentVal = sum % 10;
// 相加结果除以10,算出进位
carry = sum / 10;
// 首节点不存在时,创建首节点,并将第一个数字放入首节点中,并将当前计算的节点指向首节点
if (firstNode == null) {
firstNode = new ListNode(currentVal);
currentNode = firstNode;
} else {
// 首节点存在时,创建一个节点存放计算后的节点值
// 将当前节点指向当前节点的下一个节点
currentNode.next = new ListNode(currentVal);
// 将当前节点的下一个节点指向新创建的节点
currentNode = currentNode.next;
}
// 将l1和l2向后移动
l1 = l1.next;
l2 = l2.next;
}
// l1链表未计算完成时,将l1的剩余的节点加入到计算结果中
while (l1 != null) {
// 将l1、进位的数进行相加
int sum = l1.val + carry;
// 相加结果对10取余,算出当前节点的值
int currentVal = sum % 10;
// 相加结果除以10,算出进位
carry = sum / 10;
// 首节点不存在时,创建首节点,并将第一个数字放入首节点中,并将当前计算的节点指向首节点
if (firstNode == null) {
firstNode = new ListNode(currentVal);
currentNode = firstNode;
} else {
// 首节点存在时,创建一个节点存放计算后的节点值
// 将当前节点指向当前节点的下一个节点
currentNode.next = new ListNode(currentVal);
// 将当前节点的下一个节点指向新创建的节点
currentNode = currentNode.next;
}
// 将l1和l2向后移动
l1 = l1.next;
}
// l2链表未计算完成时,将l2的剩余的节点加入到计算结果中
while (l2 != null) {
// 将l1、进位的数进行相加
int sum = l2.val + carry;
// 相加结果对10取余,算出当前节点的值
int currentVal = sum % 10;
// 相加结果除以10,算出进位
carry = sum / 10;
// 首节点不存在时,创建首节点,并将第一个数字放入首节点中,并将当前计算的节点指向首节点
if (firstNode == null) {
firstNode = new ListNode(currentVal);
currentNode = firstNode;
} else {
// 首节点存在时,创建一个节点存放计算后的节点值
// 将当前节点指向当前节点的下一个节点
currentNode.next = new ListNode(currentVal);
// 将当前节点的下一个节点指向新创建的节点
currentNode = currentNode.next;
}
// 将l1和l2向后移动
l2 = l2.next;
}
// 最后一个进位不为0,将进位累加
if (carry != 0) {
currentNode.next = new ListNode(carry);
}
return firstNode;
}
}
两数相加Java
最新推荐文章于 2024-10-10 09:56:47 发布