javascript 数组转链表
数组转链表-普通做法
/**
* @param {Array} arr 要转换的数组
*/
function array2list(arr) {
if (arr.length === 0) return null
// 第一个节点
let head = { value: arr[0], next: null },
// 临时变量,在循环中存储上一个节点
p = head,
// 存储当前节点
node = {}
for (let i = 1; i < arr.length; i++) {
// 构建当前节点
node = {
value: arr[i],
next: null
}
// 将当前节点与之前节点连接
p.next = node
// p 是临时变量,之前和 head 共同指向同一个内存地址
// 这里 p 被重新赋值了,和 node 共同指向同一个内存地址
// 设置当前节点为之前节点
p = node
}
return head
}
// 执行:
let link = array2list([4,5,1,9])
console.log(JSON.stringify(link, null, 4))
// 输出:
{
"value": 4,
"next": {
"value": 5,
"next": {
"value": 1,
"next": {
"value": 9,
"next": null
}
}
}
}
数组转链表-递归
/**
* @param {Array} arr 要转换的数组
* @param {Number} start 数组下标,默认为 0
*/
function array2list(arr, start = 0) {
// 若序号等于数组长度,说明处理完成,直接返回 null
if(arr.length === start) {
return null
}
// 使用当前数组元素 arr[start] 构建当前链表节点
let head = { value: arr[start], next: null }
// 递归调用函数,得到当前节点的下一个节点
let next = array2list(arr, ++start)
// 将得到的下一个节点与当前节点连接
head.next = next
// 最后返回当前节点
return head
}
// 执行:
let link = array2list([4,5,1,9])
console.log(JSON.stringify(link, null, 4))
// 输出:
{
"value": 4,
"next": {
"value": 5,
"next": {
"value": 1,
"next": {
"value": 9,
"next": null
}
}
}
}
都读到最后了、留下个建议如何