一、链表
1.1. 链表的概念及结构
链表是一种物理存储结构上非连续的线性表,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。形象地说,就像火车头、车厢与每一节车厢之间由车钩连接起来。在物理内存上,节点不一定连续,但在逻辑上一定是连续的。

如下图所示,链表的结构通常分为两个域:一个域用来储存数据,另一个域用来储存下一个节点的地址(类似于指向下一节车厢)。与顺序表不同的是,链表的地址在物理上不连续,但在逻辑上是连续的。最后一个节点相当于'车尾',里面存的地址为 null。这就是一个单向、不带头、非循环的链表。类似地,还有双向、带头、循环的链表。但考试和面试中考察最多的通常是单链表。

什么是带头的链表? 第一个节点可以存任何数据,但存取的数据是没有意义的,唯一的作用就是起到一个'排头兵'的作用,方便统一操作。
什么是不带头的链表?
相当于它的 head 指针会变。比如我们把第一个节点删掉,那么第二个节点就会成为新的 head。

什么是循环链表? 最后一个节点指向了第一个节点或第二个节点,就可以构成循环链表,一般情况下都是指向第一个节点。

1.2. 链表的实现
接下来我们通过代码来实现链表。我们可以定义一个 MySingleList 类,基于面向对象的思想,使用内部类来定义我们的节点。
public class MySingleList {
static class ListNode {
private int val;
private ListNode next;
public ListNode(int val) {
.val = val;
}
}
ListNode head;
listSize;
}


