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
            }
        }
    }
}
posted @ 2020-05-09 15:11  青S衫%  阅读(803)  评论(0编辑  收藏  举报