什么是?
链表就是指向,用一个16进制的字符地址去互相指向,下面的地址为了方便上一个节点找到当前的节点的位置。
跟数组不一样,不是一个连续的,是离散型的,通过地址找到下的一个对应的节点。
- 链表中的每个节点至少包含两个部分:数据域和指针域;
- 链表中的每个节点,通过指针域的值,形成一个线性结构;
- 不适合快速的定位数据,适合动态的插入和删除数据的应用场景;
New Node(1)是让新增了一个新节点,并且新的节点的值为1
跟数组对比优缺点
数组优缺点
优点
连续性,聚合性,可以直接利用下标找到想要找的数据;可以cpu层级的缓存优化,因为数组是连续的,所以cpu取值可以把值的前一段和后一段都取到,因为这对cpu来说只取固定的值和多取一点是一样的。
缺点
两端数组不能直接去汇合,只能把一组数组搬进另一组数组去融合;
链表优缺点
优点
两组数据可以用指针指向就可以把好几段数据融汇在一起;
缺点
离散型,不能直接找到数据,要从头一个一个的找,直到找到对应的数据;无法命中cpu的缓存优化。 不适合快速定位数据,数组的话如果找第10个数据,直接data[9]就可以,但是,链表的话,因为不是连续的,所以只能从头开始一个个查找直到第10个数据。
如何中间插入一个节点?
只需要把插入新节点这个位置的上一个节点的下一个指针指向新节点,然后新节点的下一个节点指向插入位置的后一个节点,就ok了。
比如一个链表a->b->d,我们要给b后面插入c,只需要这样:
c.next=b.next;
b.next=c;