链表折磨专题零-js链表函数实现(leetcode)

201 阅读1分钟

这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)

链表基础

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 链表是一种抽象概念,代表一种唯一指向思想 链表适合用于存储一些经常增加、删除的数据

链表应用场景

对线性表的长度或者规模难以估计;频繁做插入删除操作;构建动态性比较强的线性表(我还没接触过)

代码实现

链表的实现在leetcode中有注释,本文加入两个方法,数组转列表节点及列表节点转数组

class ListNode {
    constructor(val, next) {
        this.val = (val === undefined ? 0 : val)
        this.next = next === undefined ? null : next
    }
    
    // 数组转listNode
    generateList(array) {
        const fakeHead = new ListNode(0)
        let current = fakeHead
        for(let i = 0; i < array; i++) {
            current.next = {val: array[i], next: null}
            current = current.next
        }
        return fakeHead
    }
    // listNode转数组
    generateArray(list) {
        let res = []
        while(list){
            res.push(list.value)
            list = list.next
        }
        return res
    }
}