持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
hi, 我是小黄瓜没有刺。一枚菜鸟瓜🥒,期待关注➕ 点赞,共同成长~
leetcode链表系列第三篇!🎊
题目 👾
445. 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
输入: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
思路 ✨
- 将链表转换为数组
let chain = new NodeList()
let array = []
while(chain) {
array.push(chain.val)
chain = chain.next
}
- 切换成两个数组后,对两个数组进行运算,需要获取进制以及个位数
res.push(total%10)
record = Math.floor(total/10)
- 计算后的结果转换成链表返回。
解答 🎉
/**
* 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-vue3和javascript 基础知识系列,希望能一直坚持下去,期待多多点赞🤗🤗,一起进步!🥳🥳