java实现单向循环链表_单向循环链表常用方法代码实现 | 梦溪博客

什么是单向循环链表?

将单链表中终端节点的指针端由空指针改为指向头节点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。

如下图所示:

e58dd1901460245fc4b80fe82a44602d.png

从上图可以看出,其循环就是尾节点的next指针域指向头节点的元素位置,头与尾相连形成循环状。

节点信息

单向循环链表与单链表的结构类似,没有太大变化,如下代码:

附上单向循环链表的一些必要的变量

head 节点记录链表的头节点;

size 记录链表的大小,每增加或减少一个节点都做相应的递增或递减;

last 节点记录链表的尾节点,在增加节点时也可以作为临时节点;

增加节点

增加节点与单链表大体相似,只需对头节点与尾节点做特殊处理

1. 如果链表只有头节点一个,头节点的next指针域指向自己;

2. 如果有多个节点,链表的尾节点不在指向null,而是指向头节点;

删除节点

删除节点因为没有定义固定的头节点,所以需要对第一个节点和最后一个节点进行特殊处理,写的有点复杂了

1. 从第一个节点开始依次循环单向循环链表;

2. 如果循环的节点中数据元素匹配到待删除元素,则进行判断

3. 如果待删除的元素为第一个节点,将尾节点的指针域next指向第一个节点的下一个节点,即 p.next = head.next,将head节点设置为第二个节点,即 head = n.next;

4. 如果待删除的元素为尾节点,将尾节点上一个节点的next指针域指向第一个节点,即 p.next = n.next(head);

5. 如果为中间节点,将上一个节点的next指针域指向下一个节点的next指针域,即 p.next = n.next;

6. 最后将待删除的节点next指针域以及数据元素置空。

查询节点数据元素

查找元素与单链表思想一致,循环当前节点,将节点数据元素放入数组中,并且返回即可。

总结

单向循环链表其实最需要注意的就是head节点和last节点,增加节点时,如果只有head节点,则next指针域指向自己,如果存在多个节点last节点next指针域不再指向null,需要指向head节点。删除节点时,一定要关注head节点与last节点,也就是说无论是删除head节点还是last节点,最终结果head节点都要与last节点相连,这样才会是完整的单向循环链表。还是那句老话,写代码之前先画图,看图写代码就再也不会找到指针域了。

ps:上述的例子中,没有使用固定的头节点,使用固定的头节点会使链表操作更简单,不用去对head节点与last节点做特殊处理,后续有时间会补上固定头节点的代码实现方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值