线性表———双向链表(java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40301026/article/details/86773133

        熟悉了单链表后就可以挑战双向链表了,其实都一样。单链表的一个结点有一个指针域,只能指向后继结点,双向链表顾名思义就是双向的,它有两个指针域,一个指向前驱一个指向后驱结点。

        单链表只能从头遍历到尾或者从尾遍历到头也就是只能从一边进行(单向)。

一个普通结双向链表结点:

                                                                

双向链表,每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 也就是实现起来要困难一些。同时既可以从头遍历到尾, 又可以从尾遍历到头,因为有了两个指针域的原因。一个节点既有向前连接的引用, 也有一个向后连接的引用。是不是感觉很方便。

一个普通的双向链表在逻辑上是这样的:


一个一个的结点通过前后的指针相互指向就形成了一个双向链表。

一个结点的数据结构是这样的:

public class Node {
	Node pre;//上一个节点
	Node next;//下一个节点
	Object element;//数据域
	}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

其他的增删改查操作其实和单链表没多大区别,我就不写了,自己可以百度到好多。还是画一下图理解一下逻辑就行。

双向链表增加一个结点:


将下面这个独立的结点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

猜你喜欢

转载自blog.csdn.net/qq_40301026/article/details/86773133