Javascript 是否可以在JS中实现arrayToList函数,而不是向后遍历数组?

Javascript 是否可以在JS中实现arrayToList函数,而不是向后遍历数组?,javascript,linked-list,Javascript,Linked List,函数数组列表(数组){ var list=null; for(var i=array.length-1;i>=0;i--)//如果i=0,如何实现它? 列表={ 值:数组[i], 其余:列表 }; 退货清单; }您可以减少一个对象,并在末尾赋值null 函数数组列表(数组){ var list={}; reduce((o,v,i,a)=>(o.value=v,o.rest=i+1==a.length?null:{}),list); 退货清单; } log(数组列表([4,5,6,7]) 。作为

函数数组列表(数组){
var list=null;
for(var i=array.length-1;i>=0;i--)//如果i=0,如何实现它?
列表={
值:数组[i],
其余:列表
};
退货清单;

}
您可以减少一个对象,并在末尾赋值
null

函数数组列表(数组){
var list={};
reduce((o,v,i,a)=>(o.value=v,o.rest=i+1==a.length?null:{}),list);
退货清单;
}
log(数组列表([4,5,6,7])

。作为控制台包装{max height:100%!important;top:0;}
您可以不使用循环,而是使用递归

函数arrayToListRecursive(arr){
返回(!arr.length)
无效的
: {
值:arr[0],
rest:arrayToListRecursive(arr.slice(1))
}
}
函数arrayToListLoop(arr){
让list=null;

对于(设i=1;i),技巧是对列表头和当前节点使用两个单独的指针:

函数数组列表(a){
var list={},p=list;
for(设a的x){
p、 值=x;
p、 rest={};
p=p.rest;
}
退货清单;
}

console.log(arrayToList([11,22,33])
你想从头开始建立一个链表吗?是的!@Nina ScholzThank you!但是如果它是一个大数组(1000万个数字)我想它会炸毁堆栈。说句公道话,我添加了一个循环版本,但我不确定你是否应该创建一个包含1000万个数字的列表,可能有更好的方法来解决你的问题。我已经测试了你的递归版本arrayToList,它可以在堆栈炸毁之前在18000个元素上处理数组(在内存为8gb的PC上),而循环版本可以轻松处理10000000个元素上的数组。@synthet1c极好!关闭列表有多优雅?我的意思是将最后一个元素设置为null(tail)。