因为链表相比于哈希表、有向图的代码短,所以频繁在面试中被考察:
为什么会出现链表?
由于数组的大小不能扩展, 使用一个新的数据结构来解决此问题,这个新的数据结构就是链表。
即采用化整为零的思路,在原来不同的情况下,去外部扩展新的分基地(即新的内存空间),然后通过连接两个内存空间的这种方法,即为链表。
单链表(只有一个指针域)的一些操作:
关于单链表的存取,有时候我们在单链表的第一个结点(有效元素)之前附设一个结点,称之为头结点;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进行,由于单链表的最后一个数据元素没有直接后继,则指针为NULL。
一个链表中,可以没有头结点,不能没有头指针。
对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。
下面是带头结点的单链表与空表的比较图。
关于头指针:
- 在线性表的链式存储结构中,头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。
- 头指针具有标识作用,故常用头指针冠以链表的名字。
- 无论链表是否为空,头指针均不为空。头指针是链表的必要元素。
关于头结点:
- 头结点是为了操作的统一与方便而设立的,放在第一个元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等)。
- 有了头结点后,对在第一个元素结点前插入结点和删除第一个结点,其操作与对其它结点的操作统一了。
- 首元结点也就是第一个元素的结点,它是头结点后边的第一个结点。
- 头结点不是链表所必需的。
- https://www.cnblogs.com/didi520/p/4165486.html(详细)