[路飞]_leetcode-2-两数相加

简介: leetcode-2-两数相加

网络异常,图片无法展示
|


「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战


[题目地址][B站地址]


给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。


请你将两个数相加,并以相同形式返回一个表示和的链表。


你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


示例 1:


网络异常,图片无法展示
|


输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807.
复制代码


示例 2:


输入: l1 = [0], l2 = [0]
输出: [0]
复制代码


示例 3:


输入: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出: [8,9,9,9,0,0,0,1]
复制代码


提示:


  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零


解题思路如下:


  1. 创建虚拟头节点用来返回结果链表
  2. 创建 num 变量记录之前节点的和值的进位数值
  3. 当传入链表至少一个不为空的时候,遍历链表,得到当前循环的和值 sum = (l1?li.val:0) + (l2?l2.val:0) + num
  4. 根据 sum 创建下一个节点 `new ListNode(sum%10)
  5. 记录进位数值 num = Math.floor(sum/10)
  6. 将结果链表、l1l2 走向后走一位(如果某个链表为空,则指向 null
  7. 当两个链表都为空后,判断此时进位数值是否不为零,如果不为零,则根据进位数值节点连接到结果链表末尾
  8. 返回结果链表的头节点


说明: 根据题意可知链表节点的值为 0~9,则 sum 的值为 0~18,所以 num01


代码如下:


var addTwoNumbers = function(l1, l2) {
  const vhead = new ListNode(0);
  let num = 0,
  cur = vhead;
  while(l1||l2){
    const sum = (l1?l1.val:0)+(l2?l2.val:0)+num;
    cur.next = new ListNode(sum%10)
    num = Math.floor(sum/10);
    cur = cur.next;
    l1 = l1?l1.next:null;
    l2 = l2?l2.next:null;
  }
  if(num) cur.next = new ListNode(num);
  return vhead.next;
};
复制代码


至此我们就完成了 leetcode-2-两数相加


如有任何问题或建议,欢迎留言讨论!

相关文章
|
9月前
|
人工智能
华为机试HJ26:字符串排序
华为机试HJ26:字符串排序
|
9月前
|
算法
华为机试HJ14:字符串排序
华为机试HJ14:字符串排序