文章目录
- 四-下, 单向循环链表
- 4.0 定义和概念
- 4.1 单向循环链表的应用--约瑟夫问题
四-下, 单向循环链表
4.0 定义和概念
- 单链表的指针域只存储了向后的指针,到了尾结点就无法继续向后的操作。
- 本篇文章将介绍单向循环链表,它和单链表的区别在于末尾结点的指针域不是指向null,而是指向头结点,形成首尾相连的环。这种首尾相连的单链表称为单向循环链表。循环链表可以从任意一个结点出发,访问到链表中的全部结点。
- 和单链表一样,为了使空链表与非空链表处理一致,我们通常会设置一个头结点。当然,之前提到的单链表和本文的单向循环链表都不是必须要有头结点,只是为了简化操作。
- 单向循环链表的查找、删除和修改操作与单链表一致(这里不在赘述,可参考前面的文章),插入操作和单链表有所不同,单向循环链表需要维持环状结构。
判断单链表为空的条件是head.next == null,而判断单向循环链表为空的条件为head.next == head
。- 单向循环链表初始化时,头结点的next域指向自身,形成环状结构。
Java实现单向循环链表的简单案例
4.1 单向循环链表的应用–约瑟夫问题
N个人围成一个环,选取一个正整数M(<n)作为报数值。从第一个人开始按顺时针方向自1开始顺序报数,
报到m停止报数,报m的出列,下一个继续开始重新报数,直到环中只剩下一个为最后的优胜者。Java单向循环链表解决约瑟夫问题