单向链表
- 只能从头遍历到尾或者从尾遍历到头(一般从头到尾)
- 也就是链表相连的过程是单向的
- 实现的原理是上一个链表中有指向下一个的引用
单向链表有一个比较明显的缺点:
我们可以轻松的到达下一个节点,但是回到上一个节点是很难的。但是,实际开发中,经常会遇到需要回到上一个节点的情况
举个例子: 假设一个文本编辑用链表来存储文本。每一行用一个String对象存储在链表的一个节点中,当编辑器用户向下移动光标时,链表直接操作到下一个节点即可。但是当用于将光标向上移动呢?在这个时候为了回到上一个节点,我们可能需要从first开始,依次走到想要的节点上
双向链表
- 既可以从头遍历到尾,又可以从尾遍历到头
- 也就是链表相连的过程是双向的。
- 一个节点既有向前连接的引用,也有一个向后连接的引用.
- 双向链表可以有效的解决单向链表中提到的问题
双向链表有什么缺点呢?
- 每一在插入或删除某个节点时,需要处理四个引用,而不是两个.也就是实现起来要困难一些
- 并且相当于单向链表,必然占用内存空间更大一些
- 但是这些缺点和我们使用起来的方便程度相比,是微不足道的
双向链表的特点
- 可以使用一个head和一个tail分别指向头部和尾部的节点
- 每个节点都由三部分组成:前一个节点的指针(prev)/保存的元素(item)/后一个节点的指针(next)
- 双向链表的第一个节点的Prev是Null
- 双向链表的最后的节点的next是Null