熟悉了单链表后就可以挑战双向链表了,其实都一样。单链表的一个结点有一个指针域,只能指向后继结点,双向链表顾名思义就是双向的,它有两个指针域,一个指向前驱一个指向后驱结点。
单链表只能从头遍历到尾或者从尾遍历到头也就是只能从一边进行(单向)。
一个普通结双向链表结点:
双向链表,每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 也就是实现起来要困难一些。同时既可以从头遍历到尾, 又可以从尾遍历到头,因为有了两个指针域的原因。一个节点既有向前连接的引用, 也有一个向后连接的引用。是不是感觉很方便。
一个普通的双向链表在逻辑上是这样的:
一个一个的结点通过前后的指针相互指向就形成了一个双向链表。
一个结点的数据结构是这样的:
public class Node {
Node pre;//上一个节点
Node next;//下一个节点
Object element;//数据域
}
其他的增删改查操作其实和单链表没多大区别,我就不写了,自己可以百度到好多。还是画一下图理解一下逻辑就行。
双向链表增加一个结点:
将下面这个独立的结点newnode插入到上图的双向链表中。第一步:将前一个结点next指针指向newnode即:1号绿线;并将newnode结点的前驱指针pre指向前面的结点即:2号绿线。第二步:netnode的后继指针指后面的结点即:4号绿线;并将后一个结点的前驱指针pre指向newnode结点即:3号绿线。
双向链表删除一个结点:
删除2号结点,直接将1好结点的后继指针next指向3号指针,接下来把3号结点的前驱指针pre指向1号指针。ok大功告成。
感觉自己对双向链表了解差不多可以找一个东西练习一下:
Java中的LinkedList的底层原理是的双向链表,我自己参照JDK手写的,可以锻炼一下自己。
https://blog.csdn.net/qq_40301026/article/details/86510295