JavaScript 链表:理解和实现 ES6 中的链表 - 实现
节点类
我们如何连接这些节点?
插入头部
尾部插入
随机插入位置
完整代码
AWS AI 直播!
本文是上一篇文章的续篇,上一篇文章中我们详细阐述了所有相关概念、优缺点、大O时间复杂度、实际应用案例、链表的主要操作以及所有相关理论。如果您尚未阅读上一篇文章,我建议您先阅读它。
这是一个数据结构系列文章,使用 ES6 规范在 JavaScript 中实现。
本文旨在逐步讲解链表的实现过程。实际上,这两篇文章本身就构成了一个链表,因为前一篇文章指向了后一篇文章。
节点类
在接下来的代码中,我们将定义 Node 类及其构造函数。请记住,节点是存储数据和指向下一个节点的指针的基本构建块。
这个类需要处理节点的创建。每次实例化该类时,构造函数都负责初始化两个属性:data 和 next。
现在的挑战是创建接下来的四个节点,只是创建节点,而不是如何连接它们。
基本上,我们需要实例化四次 Node 类才能创建四个节点。 目前,我们暂时不用考虑第二个参数。为什么呢?因为此时我们只是在学习如何创建节点,暂时不用考虑它们之间的连接方式。
我们如何连接这些节点?
在之前的代码中,我们只是独立地创建了节点,现在是时候学习如何将它们连接起来形成链表了。

现在我们已经定义了 Node 类,接下来需要定义一个新类,该类将负责处理下一个指针属性以及链表的主要操作。让我们创建 LinkedList 类。
在上面的代码中,我们定义了一个名为 LinkedList 的类及其构造函数。该构造函数负责初始化 head 属性以存储第一个节点,并设置 size 属性以跟踪链表的大小。
接下来,我们将提供在列表的开头、结尾或任何随机位置插入元素的功能。
插入头部
我们刚刚创建了一个简单的方法,用于向链表的头部添加节点。我们将数据参数传递给该方法,并为 ` this.head`属性设置一个值,从而创建一个新的 `Node` 类实例。
让我们对目前的实现进行一些测试,看看结果如何。
尾部插入
我们刚刚学习了如何在头部添加节点。现在,是时候学习如何在尾部添加节点了。
在这个aboveinsertToTail函数中,我们传递了数据参数,然后创建了一个新的 Node 类实例。之后,我们检查链表头节点是否为空。如果为空,则将头节点设置为刚刚创建的新节点;否则,将尾节点设置为头节点,然后遍历链表找到尾节点并更新尾节点的 next 指针。
随机插入位置
最后,我们将学习如何在链表的任意位置插入一个新节点。为此,我们需要遍历链表,直到找到目标位置。
现在我们将使用以下测试来测试这个函数。
输出结果如下所示。如您所见,在给定的索引处,节点(600)被添加到列表的第二个索引位置。
完整代码
希望你对数据结构,特别是链表,有了更深入的了解。今天就到这里。
感谢阅读!如果您觉得这篇文章有趣,请点赞并分享给您的朋友,我将不胜感激。我希望这篇文章能为您带来一些新的知识。欢迎您在我的博客和Medium
上关注我。





