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

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

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

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

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

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

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


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

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

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

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

双向链表增加一个结点:

线性表———双向链表(java)
将下面这个独立的结点newnode插入到上图的双向链表中,第一步:断开打红叉的两个指针连接。第二步:将前一个结点next指针指向newnode即:1号绿线;并将newnode结点的前驱指针pre指向前面的结点即:2号绿线。第三步:netnode的后继指针指后面的结点即:4号绿线;并将后一个结点的前驱指针pre指向newnode结点即:3号绿线。

双向链表删除一个结点:

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

删除2号结点,直接将1好结点的后继指针next指向3号指针,接下来把3号结点的前驱指针pre指向1号指针。ok大功告成。

感觉自己对双向链表了解差不多可以找一个东西练习一下:

Java中的LinkedList的底层原理是的双向链表,我自己参照JDK手写的,可以锻炼一下自己。

https://blog.csdn.net/qq_40301026/article/details/86510295

 

相关文章:

  • 2021-07-14
  • 2021-07-06
  • 2021-12-02
  • 2022-12-23
  • 2021-05-26
  • 2021-12-09
  • 2021-04-26
猜你喜欢
  • 2022-03-05
  • 2021-08-06
  • 2022-12-23
  • 2021-10-07
  • 2021-12-29
  • 2022-12-23
  • 2020-10-12
相关资源
相似解决方案