四-下, Java实现 单向循环链表 1

四-下, 单向循环链表

4.0 定义和概念

  • 单链表的指针域只存储了向后的指针,到了尾结点就无法继续向后的操作。

  • 本篇文章将介绍单向循环链表,它和单链表的区别在于末尾结点的指针域不是指向null,而是指向头结点,形成首尾相连的环。这种首尾相连的单链表称为单向循环链表。循环链表可以从任意一个结点出发,访问到链表中的全部结点

  • 和单链表一样,为了使空链表与非空链表处理一致,我们通常会设置一个头结点。当然,之前提到的单链表和本文的单向循环链表都不是必须要有头结点,只是为了简化操作。

  • 单向循环链表的查找、删除和修改操作与单链表一致(这里不在赘述,可参考前面的文章),插入操作和单链表有所不同,单向循环链表需要维持环状结构。

  • 判断单链表为空的条件是head.next == null,而判断单向循环链表为空的条件为head.next == head

  • 单向循环链表初始化时,头结点的next域指向自身,形成环状结构。


Java实现单向循环链表的简单案例

4.1 单向循环链表的应用–约瑟夫问题

N个人围成一个环,选取一个正整数M(<n)作为报数值。从第一个人开始按顺时针方向自1开始顺序报数,
报到m停止报数,报m的出列,下一个继续开始重新报数,直到环中只剩下一个为最后的优胜者。

Java单向循环链表解决约瑟夫问题

posted @ 2022-05-26 20:31  青松城  阅读(41)  评论(0编辑  收藏  举报