zoukankan      html  css  js  c++  java
  • 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
                }
            }
        }
    }
    
  • 相关阅读:
    P3973 [TJOI2015]线性代数
    P3168 [CQOI2015]任务查询系统
    二次剩余学习笔记
    URL注入攻击+知识星球资源整理
    我的网络安全架构知识点的总结(待完善)
    Sudo提权
    DNSlog平台各种利用姿势(盲注)
    Wireshark抓包理论加实操
    Fofa搜索技巧(理论加实践的整理)
    Windows留后门维持权限(其中包括详细的telnet改端口与连接)
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12857615.html
Copyright © 2011-2022 走看看