文章目录
链表
链表是数据元素的线性集合,和数组不一样的是,元素的位置不是由它们在内存中的物理位置给出。相反,每个元素中有一个指针(地址)指向下一个元素。
一般链表的节点数据由下面两部分组成:
- 节点数据
- 下一个节点的引用
这种结构允许在遍历期间有效的从序列中插入和删除元素,但这样的一个缺点就是访问时间是线性的。
链表的定义
下面使用JavaScript代码定义链表,使用 es6 语法
节点
定义节点:
export default class LinkedListNode {
// 构造函数
constructor(value, next = null) {
this.value = value; // 节点值
this.next = next; // 下个节点的指针
}
// 重写toString方法
toString(callback) {
// callback 传递回调函数,可自定义输出,默认输入节点数据
return callback ? callback(this.value) : `${
this.value}`;
}
}
链式结构
链表有两个特殊的节点,头(head)节点和尾(tail)节点。
// 使用es6语法
// 定义链表节点
import LinkedListNode from './LinkedNode';
// 定义链表结构
export default class LinkedList {
constructor() {
/**
* @var LinkedListNode
*/
this.head = null; // 头节点
/**
* @var LinkedListNode
*/
this.tail = null; // 尾节点
}
}
链表的基本操作
插入头节点
/**
* 插入头节点
* @param {*} value
* @return {LinkedList}
*/
prepend(value) {
// 创建一个节点,让它指向原本的头节点
const newNode = new LinkedListNode(value, this