力扣刷题Days31-2.两数相关(js)

1,题目

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

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

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

2,代码

/**
 * 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) {
    // 是否进1 
    // 两个链表 不是都null的时候 继续
    // 对应为求和,判断是否有进位,变量temp来存放进位
        // temp = 0,如果有进位,则temp =1
        // temp和下一对应位进行求和 循环
    const resList = new ListNode(0);
    let  cur = resList;

    let carry = 0;

    while(l1 != null || l2 != null){
        const x = l1 === null ? 0 : l1.val;
        const y = l2 === null ? 0 : l2.val;
        let sum = x + y + carry;

        carry = parseInt(sum/10);
        sum = sum % 10;
        cur.next = new ListNode(sum);
        // 指针移动
        cur = cur.next;
        if(l1 != null){
            l1 = l1.next;
        }
         if(l2 != null){
            l2 = l2.next;
        }
    }
    if(carry === 1){
        cur.next = new ListNode(1);
    }

    return resList.next;


};

3,学习与总结

1,javascript基础

(1)创建的是一个节点,包含节点值和节点的next指针;

 const resList = new ListNode(0);

(2)预先指针的使用:由于要不断移动指针指向从而保存各位数值之和,所以需要一个预先指针;来防止头指针丢失。

(3)当前结果值的写入和进位的获取

  const x = l1 === null ? 0 : l1.val;
  const y = l2 === null ? 0 : l2.val;
  let sum = x + y + carry;

  carry = parseInt(sum/10);
  sum = sum % 10;
  cur.next = new ListNode(sum);
     

https://leetcode.cn/problems/add-two-numbers/solutions/7348/hua-jie-suan-fa-2-liang-shu-xiang-jia-by-guanpengc


勉励自己:贵在坚持!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值