数据结构(二)之链表

数组是用连续内存空间,而链表是用零散内存然后通过“指针”串联起来使用。
这样会出现个问题,如果内存有剩余不连续10M的内存空间,你申请10m的数组会oom,但是你申请10m的链表就不会有问题。图片用王争老师的

常用链表分为三种:单向链表;双向链表;循环链表;双向循环链表;

第一种:单向链表

第一个节点叫头结点,头结点用来记录链表基地址(也可以叫首地址)
最后一个节点叫尾节点,特殊之处在于他的next不是指向下一节点而是指向空地址null

我们都知道链表增删与查询的时间复杂度 与数组 是相反的
如图,链表的增删只需要修改相邻两个Node的指针地址就ok了。时间复杂度O(1)

但是单向链表的随机访问时间复杂度是O(n),因为无论如何都需要从首地址依次遍历(双向链表会快一些,比如LinkedList的实现是先判断k与n/2的大小,然后选择是从前往后遍历还是从后往前遍历,最坏是遍历n/2次),才能找到第k个Node.
未完待续。。。

猜你喜欢

转载自www.cnblogs.com/jiangxiaoxian/p/9788872.html