1. 概述
链表是常见的一种数据结构,由若干个节点通过指针相连接而成。在 JavaScript 中没有直接提供链表结构,但我们可以通过对象和引用的方式模拟链表。
2. 链表的基本结构
链表由若干个节点构成,每个节点都包含两个部分:数据和指向下一个节点的指针。链表有一个头节点,头节点不包含数据,只包含指向第一个节点的指针。
2.1 节点定义
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
以上是一个节点的定义,包含一个数据域和一个指向下一个节点的指针。其中,data 为该节点存储的数据,next 为指向下一个节点的指针。如果一个节点没有后继节点,则 next 的值为 null。
2.2 链表定义
class LinkedList {
constructor() {
this.head = new Node(null);
this.length = 0;
}
}
定义了一个链表类,其中 head 为头节点,不包含实际数据。链表的长度存放在 length 属性中。
3. 查找链表长度的实现
链表本身不包含信息,只是一个由节点组成的数据结构。使用链表时,要根据节点间的指针关系进行操作。
3.1 计算链表长度
计算链表长度的实现,通过遍历链表依次统计节点数目。
class LinkedList {
constructor() {
this.head = new Node(null);
this.length = 0;
}
// 计算链表长度
size() {
let count = 0;
let cur = this.head;
while (cur.next) {
count++;
cur = cur.next;
}
return count;
}
}
以上代码定义了链表的 size 方法,用于计算链表的长度。在实际操作中,需要从头节点开始遍历链表,依次统计节点数量。当遍历完最后一个节点,需要返回节点数量。
3.2 测试代码
const linkedlist = new LinkedList();
console.log(linkedlist.size()); // 输出 0
linkedlist.head.next = new Node(1);
linkedlist.head.next.next = new Node(2);
linkedlist.head.next.next.next = new Node(3);
console.log(linkedlist.size()); // 输出 3
我们创建了一个链表对象 linkedlist,调用 size 方法计算链表长度。当链表为空时,返回 0;当链表包含节点时,返回正确的长度。
4. 总结
链表是常用的数据结构之一,是指节点之间通过指针相连接而成的数据结构。在 JavaScript 中,使用对象和引用的方式来模拟链表结构。链表的一些常见操作包括添加节点、删除节点、修改节点和查找节点等,必须依赖于节点之间的指针关系。在本文中,我们介绍了链表的基本结构和操作,包括节点的定义和链表的实现,以及如何统计链表的长度。