自己实现集合框架(十):双链表的实现

0?wx_fmt=gif

0?wx_fmt=jpeg

一. 双链表的数据结构

1. 什么是双链表?

双链表的结构如下图所示:0?wx_fmt=png

2. 为什么要使用双链表?

二.双链表的实现

1.定义双链表节点类

双链表节点类DoubleLinkNode的定义如下所示:

0?wx_fmt=png

代码解释:

成员变量data保存当前结点的数据元素,prev指向前驱结点,next指向后继结点。

2.定义双链表类

双链表类DoubleLinkedList的定义如下,head成员变量表示双链表的头结点。

0?wx_fmt=png

代码解释:

双链表DoubleLinkedList类实现接口LList,所以必须实现该接口的相关方法,具体实现在下面讲解。

3. 双链表的插入

对双链表进行插入操作非常方便,只需要改变节点间的链接关系即可,不需要移动元素。代码如下:

0?wx_fmt=png

0?wx_fmt=png

代码解释:

p指向双链表的某一个结点,在p结点之前插入q结点的示意图如下所示:0?wx_fmt=pngp结点之前插入q结点的语句如下所示:DoubleLinkNode q = new DoubleLinkNode(element);

4. 双链表的删除

在单链表中删除节点只需要改变某些链接,不需要移动节点数据元素,代码如下所示:

0?wx_fmt=png

代码解释:

p指向双链表中的某个结点,删除p指向的结点示意图如下所示:0?wx_fmt=png删除p指向的结点的执行语句如下所示:p.prev.next = p.next;

5. 清空双链表

代码如下所示:

0?wx_fmt=png

6. 重写toString()方法

代码如下所示:

0?wx_fmt=png

三.测试

测试代码如下所示:

0?wx_fmt=png

运行效果如下图所示:0?wx_fmt=png

四.源代码示例

0?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值