/** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */var addTwoNumbers = function (l1, l2) { // 递归创建链表 function recursion( prev, // 链表的上一个节点 l1, // l1的当前节点 l2, // l2的当前节点 plus, // 是否有进位 ) { // 如果l1和l2都为null,表示它们都已经加完 if (!l1 && !l2) { // 查看是否还有进位需要处理,此时plus可能为1 if (plus) { prev.next = new ListNode(plus) }
// l1、l2、plus都处理完后,终止递归 return }
// 取l2和l2的值,如果l1或l2为null,则值设置为0 const val1 = l1 ? l1.val : 0 const val2 = l2 ? l2.val : 0 // 求l1、l2、plus的值之和 const sum = val1 + val2 + plus // 如果sum>=10,表示需要进位,plus为1 plus = sum >= 10 ? 1 : 0 // 创建当前节点,将其连接到prev.next,其值为sum%10,因为当前位只需要存储个位数 prev.next = new ListNode(sum % 10)
// 将prev、l1、l2都向后移动一位,继续递归计算下一个节点的值之和 recursion(prev.next, l1 && l1.next, l2 && l2.next, plus) }
// 创建一个dummy节点,作为dummy.next连接到新链表的头节点 let dummy = new ListNode(null) recursion(dummy, l1, l2, 0)
return dummy.next}
评论