文章目录

  • 四-下, 单向循环链表
  • 4.0 定义和概念
  • 4.1 单向循环链表的应用--约瑟夫问题

四-下, 单向循环链表

4.0 定义和概念

  • 单链表的指针域只存储了向后的指针,到了尾结点就无法继续向后的操作。
  • 本篇文章将介绍单向循环链表,它和单链表的区别在于末尾结点的指针域不是指向null,而是指向头结点,形成首尾相连的环。这种首尾相连的单链表称为单向循环链表。循环链表可以从任意一个结点出发,访问到链表中的全部结点
  • 编码实现环状单向链表 java 循环单向链表_头结点

  • 和单链表一样,为了使空链表与非空链表处理一致,我们通常会设置一个头结点。当然,之前提到的单链表和本文的单向循环链表都不是必须要有头结点,只是为了简化操作。
  • 单向循环链表的查找、删除和修改操作与单链表一致(这里不在赘述,可参考前面的文章),插入操作和单链表有所不同,单向循环链表需要维持环状结构。
  • 判断单链表为空的条件是head.next == null,而判断单向循环链表为空的条件为head.next == head
  • 单向循环链表初始化时,头结点的next域指向自身,形成环状结构。

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

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

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

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