链表

简介: 链表

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情

链表的概念及结构

定义:

链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。
复制代码

特点:

链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成 (malloc),每个节点包括两个部分:
 一个是存储数据元素的数据域
 另一个是存储下一个节点地址的指针域
复制代码

链表 链表

由对象构成,每个对象都有一个和一个下一个值。

网络异常,图片无法展示
|

* *javascript 中的链表看起来像这样

**

const list = {
    head: {
        value: 1
        next: {
            value: 20                                             
            next: {
                value: 22
                next: {
                    value: 21
                    next: null  
                    }
                }
            }
        }
    }
};
复制代码

链表节点分为两个域

     数据域:存放各种实际的数据,如:num、score等

     指针域:存放下一节点的首地址,如:next等.

链表的一些缺点如下。

  • 它比较慢,因为不允许像在数组中那样进行随机访问。
  • 由于指针的存储,它使用更多的内存

创建一个 javascript 类作为 ListNode

class ListNode{
  constructor(data){
    this.data = data
    this.next = null
   }
}
复制代码

将 javascript 类创建为链表

class LinkedList{
  constructor(head = null){
   this.head = head
   }
}
复制代码

**现在我们将它们放在一起

**

我们将 创建两个列表节点,然后创建一个从节点 1 到节点 2 的指针

let node1 = new ListNode(2)
let node2 = new ListNode(5)
node1.next = node2
复制代码

如果我们分解代码,我们会看到在第一行我们将 node1 定义为一个新的 listNode(2),其中 2 是我们分配给 node1 的值,然后我们在第二行做同样的事情。

然而,在第三行,我们定义了 node1 指针的值,我们告诉它等于 node2。

现在我们将使用 node1 创建一个链表

let list = new LinkedList(node1)
复制代码

这里我们将 list 定义为链表,并为其分配 node1 值。

让我们尝试访问它。

console.log(list.head.next.data)
复制代码

它将返回 5,但为什么呢?

让我们看看,当我们访问list.head.next时,我们告诉它去下一个节点,最后一个数据是访问我们在 linkedList 中时的数据。


相关文章
|
2月前
|
C++
有头链表实现(C++描述)
文章介绍了如何在C++中实现有头链表,包括节点定义、链表类定义以及各种操作如插入、删除和遍历的模板函数实现,并提供了使用整数和自定义数据类型进行操作的示例代码。
17 0
|
7月前
|
Python
|
存储 算法 Java
【JavaOj】链表十连问
【JavaOj】链表十连问
109 0
|
存储 API
链表——初识链表
链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能只管的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
111 0
链表——初识链表
|
算法 Java
第 4 章 链表(三)
第 4 章 链表
90 0
|
存储 Java
第 4 章 链表(一)
第 4 章 链表
80 0
链表必刷题一
链表必刷题一
58 0
链表必刷题一