一. 双链表的数据结构
1. 什么是双链表?
双链表的结构如下图所示:
2. 为什么要使用双链表?
二.双链表的实现
1.定义双链表节点类
双链表节点类DoubleLinkNode
的定义如下所示:
代码解释:
成员变量
data
保存当前结点的数据元素,prev
指向前驱结点,next
指向后继结点。
2.定义双链表类
双链表类DoubleLinkedList
的定义如下,head
成员变量表示双链表的头结点。
代码解释:
双链表
DoubleLinkedList
类实现接口LList
,所以必须实现该接口的相关方法,具体实现在下面讲解。
3. 双链表的插入
对双链表进行插入操作非常方便,只需要改变节点间的链接关系即可,不需要移动元素。代码如下:
代码解释:
设
p
指向双链表的某一个结点,在p
结点之前插入q
结点的示意图如下所示:在p
结点之前插入q
结点的语句如下所示:DoubleLinkNode q = new DoubleLinkNode(element);
4. 双链表的删除
在单链表中删除节点只需要改变某些链接,不需要移动节点数据元素,代码如下所示:
代码解释:
设
p
指向双链表中的某个结点,删除p
指向的结点示意图如下所示:删除p
指向的结点的执行语句如下所示:p.prev.next = p.next;
5. 清空双链表
代码如下所示:
6. 重写toString()方法
代码如下所示:
三.测试
测试代码如下所示:
运行效果如下图所示: