链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”
。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如图所示,我们把这个记录下个结点地址的指针叫作后继指针 next。
从我画的单链表图中,你应该可以发现,其中有两个结点是比较特殊的,它们分别是第一个结点和最后一个结点。我们习惯性地把第一个结点叫作头结点,把最后一个结点叫作尾结点
。其中,头结点用来记录链表的基地址。有了它,我们就可以遍历得到整条链表。而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址 NULL,表示这是链表上最后一个结点。
添加的时间复杂度
在链表尾部添加(addLast())需要从头遍历,时间复杂度为O(n)
在链表头部添加(addFirst()),时间复杂度为O(1)
在链表任意位置添加(add(int index,E e)),平均情况下为O(n/2)=O(n)
总结
在不同的位置添加元素,时间复杂度是不一样的
,并不都是O(1),好多文章这里的说法是错的