手写链表

今天来写一个链表

// 节点
class Node {
    constructor(element) {
        // 元素
        this.element = element

        // 指向下一元素的指针
        this.next = null
    }
}

// 链表
class NodeList {
    constructor() {
        // 头节点
        this.head = null

        // 记录长度
        this.length = 0
    }

    // 增加方法
    append(element) {
        let cur
        let node = new Node(element)
        if (this.head == null) {
            // 首次进来是空的,直接赋值head元素
            this.head = node
        } else {
            cur = this.head
            while (cur.next) {
                // 把当前的下一元素赋值到当前
                cur = cur.next
            }
            // 把node元素添加到末尾
            cur.next = node
        }
        // 记录长度加1
        this.length += 1
    }

    // 删除方法
    removeAt(index) {
        let length = this.length

        // 链表长度为0、参数大于链表长度减1、参数不是数字、参数小于0都属于非法参数
        if (!length || (index > length - 1) || !(typeof index === 'number') || index < 0) {
            throw new Error("非法参数");
        }
        let cur = this.head
        let prev
        let i = 0
        if (index == 0) {
            // 删除第一项,把下一节点指向head
            this.head = cur.next
        } else {
            while (i < index) {
                // 保存上一个和当前值
                prev = cur
                cur = cur.next
                i++
            }
            // 把要删除值的上一个值指向删除值的下一个值
            prev.next = cur.next

            // 把要删除值的下一节点置空
            cur.next = null
        }
        // 记录长度减1
        this.length -= 1

        // 返回删除值元素
        return cur.element
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是链表? 链表是由一组节点组成的集合。 实现我们设计的链表包含两个类。Node类用来表示节点,LinkedLi...
    少侠的甜甜圈阅读 168评论 0 0
  • 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 ...
    呼啦啦的爱阅读 400评论 0 0
  • 前面两节课程主要介绍了动态数组、栈以及队列这样三种数据结构,这三种数据结构的底层都是依托于静态数组构建的,靠res...
    xkzhai阅读 438评论 0 0
  • 如需转载, 请咨询作者, 并且注明出处.有任何问题, 可以关注我的微博: coderwhy, 或者添加我的微信: ...
    coderwhy阅读 7,928评论 1 30
  • 上次有同学讲到了链表,刚好我也学了一下,总结一下自己的学习过程,方便自己以后回顾。有疑惑的地方随时可以咨询我,有错...
    MuteZ阅读 3,132评论 0 1