关于内存拷贝(浅拷贝)和js链表的小知识点
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;
};
来自:https://segmentfault.com/a/1190000018767444
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!