链表式加法,只不过开头的是个位,注意处理进位即可
两个链表的长度不一致,也需要注意处理这个问题
var addTwoNumbers = function (l1, l2) {
let dummy = new ListNode(-1)
let head = dummy
let tmp = 0
while (l1 || l2 || tmp >= 10) {
tmp = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + (tmp >= 10 ? 1 : 0)
head.next = new ListNode(tmp >= 10 ? tmp % 10 : tmp)
// 防止为空
l1 = l1?.next
l2 = l2?.next
head = head.next
}
// 给链表结尾
head.next = null
return dummy.next
};
下面是gpt给予建议后优化的代码
var addTwoNumbers = function (l1, l2) {
let dummy = new ListNode(-1);
let head = dummy;
let tmp = 0;
while (l1 || l2 || tmp > 0) {
// 计算当前节点的和,包含上一次的进位
tmp = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + tmp;
// 当前节点的值为 tmp % 10,并更新 tmp 为下一次的进位
head.next = new ListNode(tmp % 10);
tmp = Math.floor(tmp / 10); // 更新进位
// 移动到下一个节点
if (l1) l1 = l1.next;
if (l2) l2 = l2.next;
head = head.next;
}
return dummy.next;
};