题目:
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
// 第一种方式 其实和第二种一样的
// (2->4->3)+(5->6->4) = (7->0->8),根据加法的计算过程我们知道首先从低位开始算起,也就是说应该先计算2+5=7.
// 1. 确定链表的头部 以及 需要返回 和 如果相加大于10的就进位的初始值
// 2. 取出“+”左右两边两个数的最低位
let head = null, tail = null, carry = 0;
while (carry || l1 || l2) {
// 这里做一个三元判断 因为当两个链表长度不一致时 需要在前面补0
let val1 = l1 ? l1.val : 0;
let val2 = l2 ? l2.val : 0;
// 相加
const num = val1 + val2 + carry;
carry = num >= 10 ? 1 : 0;
if (!head) {
head = tail = new ListNode(num % 10)
} else {
tail.next = new ListNode(num % 10);
tail = tail.next
}
if (l1) l1 = l1.next;
if (l2) l2 = l2.next;
}
return head
let head = new ListNode('0'), tail = head, carry = 0;
while (carry || l1 || l2) {
// 这里做一个三元判断 因为当两个链表长度不一致时 需要在前面补0
let val1 = l1 ? l1.val : 0;
let val2 = l2 ? l2.val : 0;
// 相加
const num = val1 + val2 + carry;
carry = num >= 10 ? 1 : 0;
tail.next = new ListNode(num % 10);
tail = tail.next
if (l1) l1 = l1.next;
if (l2) l2 = l2.next;
}
return head.next //返回计算结果,之所以用head.next是因为head中保存的第一个节点是刚开始定义的“0”