Linked List
- 单链表
- 双链表
- 循环链表
基本定义
参考讲解:https://www.bilibili.com/video/BV1w7411Y7Dp?spm_id_from=333.337.search-card.all.click
链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。
链表是通过结点(Node)构成,head指针指向第一个成为表头结点(头结点不存放数据),而终止与最后一个指向null的指针。
单链表 Singly Linked List
单链表由像链一样链接在一起的节点组成。现在要访问这个链,我们需要一个指针来跟踪列表的第一个元素。只要我们有关于第一个元素的信息,我们就可以遍历列表的其余部分,而不必担心记住它们的存储位置。单链表包含一个头节点:指向列表第一个元素的指针。每当我们想要遍历列表时,我们都可以使用这个头节点来实现。
下面是单链接的基本结构:
// 创建一个类:Node
// Node 类将数据存储在单个节点中。它可以存储原始数据,例如整数和字符串以及具有多个属性的复杂对象
// 除了数据,它还存储指向列表中下一个元素的指针,这有助于像链一样将节点链接在一起
class Node{
// Class node having Generic data-type <T>
public T Data; // Data to store (Could be int, string, Object etc.)
public HereNode nextNode; // 指针,用来指向下一个结点(Pointer to next node in list)
public Node headNode; // 定义链表的头结点
public int size; // 链表的长度
// constructor 构造方法: 和类class同名
// 在构造函数中,我们初始化headNode节点,使其成为函数
// 如果头节点不指向任何东西(NULL),这意味着列表为空
public Node( ){
headnode = null; //头结点为null, 列表为空值
size = 0;
}
}