资讯专栏INFORMATION COLUMN

记录一个关于内存拷贝(浅拷贝)和js链表的小知识点

hedge_hog / 1164人阅读

摘要:开头介绍记录一个做看答案学到的小知识。。。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

1.开头介绍

记录一个做leetcode看答案学到的小知识。。。
浅拷贝实现一些特殊的功能的一些应用场景

2.正文
比如:我们有一个需求如下

{
    val:0,
    child:null
}
//==>
{
    val:0,
    child:{
        val:1,
        child:{
            val:2,
            child:{
                ...
            }
        }
    }
}

我们可以这样做

    let obj1={
        val:0,
        child:null
    },
    obj2=obj1,
    i=1
    while(i<10){
        obj1.child={
            val:i,
            child:null
        };
        obj1=obj1.child
        i++
    }
    console.log("obj1:",obj1,"obj2:",obj2)//自行到控制台测试obj1:{val: 9, child: null},obj2:{val: 0, child: {…}}

由此我引申一个,js如何解决一个链表的题目,js链表的实现

题目在此:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

如何实现:

function ListNode(val) {
    this.val = val;
    this.next = null;
}
var addTwoNumbers = function(l1, l2) {
    if(l1 === null || l2 === null){
        return l1 || l2;
    }
    
    var result = new ListNode(0);
    var cur = result;//细节操作
    var p = l1;
    var q = l2;
    var carry = 0;
    
    while(p || q){
        var qval;
        var pval;
        
        if(q){
            qval = q.val;
            q = q.next;
        } else {
            qval = 0;
        }
        
        if(p){
            pval = p.val;
            p = p.next;
        } else {
            pval = 0;
        }
        
        var val = qval + pval + carry;
        
        if(val > 9){
            carry = 1;
            val %= 10;
        } else {
            carry = 0;
        }
        
        cur.next = new ListNode(val);
        cur = cur.next;
    }
    //这是carry大于1,说明超过位数了,例如99=>100,999=>1000,补一个1在最后。
    if(carry !== 0){
        cur.next = new ListNode(1);
    }
    
    return result.next;
    
};

ok

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103236.html

相关文章

  • 【Java】jdk1.8集合类特性综述及横向比较

    摘要:前置知识基础集合类基础字典该接口不基于比较继承父接口父类数据存储底层结构数组链表红黑树同双向链表红黑树复杂度插入同删除同查找同有序性迭代顺序插入顺序访问顺序自然序自定义支持否同是哈希哈希函数基于高低位同桶定位法位运算同冲突处理转换成链表红黑 前置知识: Java基础 集合类基础(jdk1.8) Map(字典) 该接口不基于Collection HashMap/LinkedHashMap...

    沈俭 评论0 收藏0
  • 初级前端开发面试总结

    摘要:前端面试总结先说背景,本人年月毕业,去年十月校招到今年月一直在做前端开发工作,年前打算换工作,就重新梳理下面试考点总结包含基础,基础,常见算法和数据结构,框架,计算机网络相关知识,可能有的点很细,有的点很大,参考个人情况进行总结,方便对知识 前端面试总结 先说背景,本人2018年7月毕业,去年十月校招到今年10月一直在做前端开发工作,年前打算换工作,就重新梳理下面试考点总结包含: ...

    jifei 评论0 收藏0
  • 初级前端开发面试总结

    摘要:前端面试总结先说背景,本人年月毕业,去年十月校招到今年月一直在做前端开发工作,年前打算换工作,就重新梳理下面试考点总结包含基础,基础,常见算法和数据结构,框架,计算机网络相关知识,可能有的点很细,有的点很大,参考个人情况进行总结,方便对知识 前端面试总结 先说背景,本人2018年7月毕业,去年十月校招到今年10月一直在做前端开发工作,年前打算换工作,就重新梳理下面试考点总结包含: ...

    tigerZH 评论0 收藏0
  • ArrayList的克隆与toArray

    摘要:概述列表是一款即实用又常用的数据结构,用来存储线性结构的数据。在中对的支持主要有两种,也是最常用的两种。本文主要分析的源码。的底层主要是基于链表来实现的。但是返回的却没有这样的等同关系。那么其方法返回的只是一个类型的数组,而不是类型。 概述 列表(list)是一款即实用又常用的数据结构,用来存储线性结构的数据。在JDK中对List的支持主要有两种,也是最常用的两种。一种是ArrayLi...

    codeKK 评论0 收藏0
  • 一篇文章彻底说清JS的深拷贝/拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    J4ck_Chan 评论0 收藏0

发表评论

0条评论

hedge_hog

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<