前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode:2 两数相加

leetcode:2 两数相加

作者头像
贵哥的编程之路
发布2020-10-28 15:33:20
3570
发布2020-10-28 15:33:20
举报
在这里插入图片描述
在这里插入图片描述
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
const q=new ListNode(0);
let p1=l1;
let p2=l2;
let p3=q;
let carry=0;
while(p1||p2)
{
    const v1=p1?p1.val:0;
const v2=p2?p2.val:0;
const val=v1+v2+carry;
carry=Math.floor(val/10);
p3.next=new ListNode(val%10);
if(p1)
{
    p1=p1.next;
}
if(p2)
{
    p2=p2.next;
}
p3=p3.next;
}
if(carry)
{
    p3.next=new ListNode(carry);
}
return q.next;
};

难以理解的点: 它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 意思:每一个数字在链表中是逆序的方式存储的,并且每一个节点只能存储一位数字。 然后是一个数字的链表(加上+)一个数字的链表:是逆序存储的哦。 解题步骤: 像做小学题一样,个十百每一位都跟相同的每一位想加。 注意点:如果"某一位"超过了十就进一,"某一位"就留下(进一的个位的数字),留到下一位在进行+1。 因为js中没有链表的操作,所以通过Object来做。 作用是存储想加后的链表哈。

const q=new ListNode(0);

问题? 0是什么意思? 没有什么意思?在相加操作上没有价值把。 如何遍历两个链表? 两个指针。

let p1=l1;
let p2=l2;
let p3=q;

第三个指针是新建的链表,相同的位想加后是要存储的。

while(p1||p2)

如果两个中任何一个还有值就继续遍历,为什么? 因为还没完呢啊。。。。 还有一个问题就是一长一短怎么办?p1与p2都有可能哦。

const v1=p1?p1.val:0;
const v2=p2?p2.val:0;

然后是什么? 想加啊。

const val=v1+v2;

问题? 如果大于9了怎么办? 个位留下,十位进一下一轮在想加吧。 新建一个carry=0; 然后是获取和的十位上的数字了呀。

carry=Math.floor(val/10);

放到相加的操作上.

const val=v1+v2+carry;

然后是把个位上的数加到新链表上。

p3.next=new ListNode(val%10);

完成了。 难点: 记住哈,兄弟们。

carry=Math.floor(val/10);
p3.next=new ListNode(val%10);

这两句第一个是截图十位,等到下一次循环在下位相加所以不管它了。第二句是截图个位的,因为十位已经有人管了,所以管个位就行了,兄弟们。 问题? 第一次的呢?

const val=v1+v2+carry;

加0吗? 没错的兄弟们,因为开始没有进1的啊。

if(p1)
{
    p1=p1.next;
}
if(p2)
{
    p2=p2.next;
}

然后是如果p1或者p2如果有值的话,就继续next,如果某一个没值就不next了。。 p3=p3.next; 然后新建的相加后的指针也进1. 然后是问题: 最后时候的链表如果超过9怎么办? 进1啊。

if(carry)
{
    p3.next=new ListNode(carry);
}

好了完成.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档