自己实现集合框架(六):实现单链表逆转

0?wx_fmt=gif

0?wx_fmt=jpeg

一. 什么是单链表逆转?

我们都知道,单链表的每个结点由两部分组成,一个数据域data和一个指向其后继结点的指针域next,最后一个结点的next域为空。单链表逆转就是将链表中各结点的next域指向它的前驱结点,原来第一个结点的next域为空,head指向原来的最后一个节点。

二. 算法描述

单链表的逆转算法描述如下:
1. 初始,设置p结点指向第一个结点,front结点指向p的前驱结点,q结点指向p的后继结点。

0?wx_fmt=png2. 循环中,将p的后继结点p.netx指向p的前驱结点front
0?wx_fmt=png3. 循环结束后已经实现逆转的单链表如下所示:
0?wx_fmt=png

三. 算法实现

p指向单链表的某个结点,frontp的前驱结点,那么使p的后继结点p.next指向p的前驱结点的语句是:

0?wx_fmt=png

但是如果使p的后继结点指向了p的前驱结点,那么p和原来的后继结点之间的链接就断开了,于是我们需要声明一个q节点来记住p和原来后继结点之间的关系,使q=p.nextfront,p,q这三个结点的引用同时沿着单链表向后移动。
可逆转的单链表类是在前面文章已经实现的单链表SinglyLinkedList类的基础上增加了单链表逆转的功能,也即继承自SinglyLinkedList类。代码实现如下:

0?wx_fmt=png

四.测试

测试代码如下所示:

0?wx_fmt=png

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

五.源代码示例

0?wx_fmt=gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值