双向循环链表的Java实现代码:
第三章 线性表
循环链表(circular linked list)
基本概念
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称
循环链表。
循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断p->next是否为空,现在则是判断p->next是否等于头结点。
带有头结点的空循环链表:
![](https://i-blog.csdnimg.cn/blog_migrate/53d945e7b57fc80746d9524d37a881d2.png)
非空的循环链表:
![](https://i-blog.csdnimg.cn/blog_migrate/946f4a7f55b2c6510e33ed2b4b088002.png)
尾指针对两个循环链表的合并操作也非常方便
![](https://i-blog.csdnimg.cn/blog_migrate/2218c9931fbf72dabc3f8f468f726f48.png)
双向链表(double linked list)
双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。
线性表的双向链表存储结构如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6d8bf504a444158a329046b8dae0ef88.png)
双向链表的循环、带头结点的空链表如下:
![](https://i-blog.csdnimg.cn/blog_migrate/2813ca98d9076274e4c2a744f964d33a.png)
非空、循环、带头结点的双向链表如下:
![](https://i-blog.csdnimg.cn/blog_migrate/cf2a7ca16425c39f2e9a624f0ee0a175.png)
双向链表的插入操作
![](https://i-blog.csdnimg.cn/blog_migrate/99db1f10af84fa4c19c32bcbf118dcd5.png)
双向链表的删除操作
![](https://i-blog.csdnimg.cn/blog_migrate/544391de4d7a5ed69a72326e0390ed56.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ef2df65523e150a04cdee1978a5038cd.png)
双向链表说白了就是空间换时间。