leetcode系列第三弹 💥「445 - 两数相加II 」 🥒

201 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

hi, 我是小黄瓜没有刺。一枚菜鸟瓜🥒,期待关注➕ 点赞,共同成长~

leetcode链表系列第三篇!🎊

题目 👾

445. 两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

示例1:

image.png

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

提示:

  • 链表的长度范围为 [1, 100]
  • 0 <= node.val <= 9
  • 输入数据保证链表代表的数字无前导 0

思路 ✨

  1. 将链表转换为数组
let chain = new NodeList()
let array = []
 while(chain) {
    array.push(chain.val)
    chain = chain.next
}
  1. 切换成两个数组后,对两个数组进行运算,需要获取进制以及个位数
res.push(total%10)
record = Math.floor(total/10)
  1. 计算后的结果转换成链表返回。

解答 🎉

/**
* 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) {
    let t1 = []
    let t2 = []
    let res = []
    // 转换l1链表为数组
    while(l1) {
        t1.push(l1.val)
        l1 = l1.next
    }
    // 转换l2链表为数组
    while(l2) {
        t2.push(l2.val)
        l2 = l2.next
    }

    let len1 = t1.length - 1
    let len2 = t2.length - 1
    let record = 0
    
    // 边界条件,如果数组l1或l2长度不相等,那么长度短的会补0
    while(len1 > -1 || len2 > -1 || record) {
    
        // 取两个数组的值分别取出相加,如果t2数组的长度小于t1数组,那么会取0
        let num1 = (t1[len1] || 0)
        let num2 = (t2[len2] || 0)
        
        // 加入前一位的十位上的数字
        let total = num2 + num1 + record
        
        // 取个位上的数字
        res.push(total%10)
        
        // 保存十位上的数字,因为据题意可知,十位上的数字需要进一
        record = Math.floor(total/10)
        len1--
        len2--
    }

   
    let next = null
    // 将数组转化为链表
    for(let i = 0; i < res.length; i++) {
        // 创建尾节点,遍历生成链表的顺序为从后往前
        const current = new ListNode(res[i])
        // 将next指针指向下一个节点
        current.next = next
        next = current;
    }
    
    // 返回头节点
    return next
};

写在最后

leetcode系列第三篇!未来可能会更新实现mini-vue3javascript 基础知识系列,希望能一直坚持下去,期待多多点赞🤗🤗,一起进步!🥳🥳