链表两数想加问题优化点

链表两数想加问题优化点

Tags
算法
description
更新时间
Last updated January 26, 2022
 
notion image

初始版本

 
/* * @lc app=leetcode.cn id=2 lang=javascript * * [2] 两数相加 */ // @lc code=start /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers = function (l1, l2) { const head = new ListNode(0, null); let p = head; let up = 0; while (l1 && l2) { const sum = l1.val + l2.val + up; const cur = sum % 10; const tmp = new ListNode(cur, null); up = Math.floor(sum / 10); p.next = tmp; p = tmp l1 = l1.next; l2 = l2.next } let rest = l1 || l2; while(rest){ const sum = rest.val + up; const cur = sum % 10; const tmp = new ListNode(cur, null); up = Math.floor(sum / 10); p.next = tmp; p = tmp rest = rest.next; } if(up){ const tmp = new ListNode(up, null); p.next = tmp; } return head.next; }; // @lc code=end
这个版本虽然也能实现,但是代码量较多,其实有一些重复的逻辑
 

优化版本

 
/* * @lc app=leetcode.cn id=2 lang=javascript * * [2] 两数相加 */ // @lc code=start /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers = function (l1, l2) { const head = new ListNode(0, null); let p = head; let up = 0; while (l1 || l2 || up) { let sum = 0; if (l1) { sum += l1.val; l1 = l1.next; } if (l2) { sum += l2.val; l2 = l2.next; } sum += up; const cur = sum % 10; const tmp = new ListNode(cur, null); up = Math.floor(sum / 10); p.next = tmp; p = tmp } return head.next; }; // @lc code=end
  • 将l1,l2,up的逻辑在一个循环里处理,因为其实际逻辑都是一样的,创建新的节点并链接到旧节点