public class CircleSinglyLinkList {
private Node head;
CircleSinglyLinkList(){
this.head = null;
}
CircleSinglyLinkList(Node head){
this.head = head;
}
//向表头插入一个值为x的结点
public void insertHead(int x){
Node newNode = new Node(x);
if(this.head == null){
this.head = newNode;
newNode.next = this.head;
}else{
Node last = this.head;
newNode.next = this.head;
this.head = newNode;
while(last.next != newNode.next){
last = last.next;
}
last.next = this.head;
}
}
//向表尾插入一个值为x的结点
public void insertTail(int x){
Node newNode = new Node(x);
if(head == null){
this.head = newNode;
newNode.next = this.head;
}
else {
Node cur = this.head;
while(cur.next != this.head){
cur = cur.next;
}
newNode.next = this.head;
cur.next = newNode;
}
}
public void deleteData(int data){
Node cur = findNode(data);
Node last = this.head; if(cur == null){
return;
}
if(cur == this.head){
while(last.next != this.head){
last = last.next;
}
this.head = cur.next;
last.next = this.head;
cur = null;
return ;
}
Node pre = head;
while(pre.next != cur){
pre = pre.next;
}
pre.next = pre.next.next;
cur = null;
} public Node findNode(int data){
if(head == null){
System.out.println("链表为空");
return null;
}
Node cur = head;
while (cur.next != head && cur.value != data){
cur = cur.next;
}
return cur;
}
@Override
public String toString() {
Node cur = head;
String str = "";
StringBuilder newStr = new StringBuilder("");
while(cur.next != head){
newStr.append(cur.value+"--->");
cur = cur.next;
}
newStr.append(cur.value+"--->头");
return newStr.toString();
} public static void main(String[] args) {
CircleSinglyLinkList circleSinglyLinkedList= new CircleSinglyLinkList();
// Josephus
int peopleNum = 10;
int each = 3;
int count = 1;
for (int i = 0; i < peopleNum; i++) {
circleSinglyLinkedList.insertTail(i+1);
}
// System.out.println(circleSinglyLinkedList.toString());
Node another = circleSinglyLinkedList.head;
Node pre = another;
while(true){
if(another.next == another){
break;
}
if(count%3 == 0){
pre = another.next;
circleSinglyLinkedList.deleteData(another.value);
count++;
another = pre;
System.out.println(circleSinglyLinkedList.toString());
}else{
another = another.next;
count++;
} }
//// circleSinglyLinkedList.deleteData(0);
// circleSinglyLinkedList.deleteData(1);
// circleSinglyLinkedList.insertHead(1);
//// circleSinglyLinkedList.deleteData(1);
// circleSinglyLinkedList.insertTail(2);
//// System.out.println(circleSinglyLinkedList.findNode(1).value);
//// circleSinglyLinkedList.deleteData(1);
//// circleSinglyLinkedList.deleteData(90);
// circleSinglyLinkedList.deleteData(1);
// System.out.println(circleSinglyLinkedList.toString());
}
}

这个是java语言的实现,(我写的),没有写很多功能,但是基本的有了,可以实现那个算法了。注意的问题都在c语言里面解释了。

最新文章

  1. bootstrap 无限极菜单
  2. [Google Guava]学习--新集合类型BiMap
  3. WebClient与WebRequest差异
  4. Dynamic CRM 2013学习笔记(四十)流程3 - 对话(Dialog)用法图解
  5. spring这么流行的原因是什么
  6. Linux常用命令 查看进程信息时 copy的-----温故而知新
  7. JVM 常用配置
  8. json里的日期字符串 怎么 转换成 javascript 的 Date 对象?
  9. [BZOJ 1576] [Usaco2009 Jan] 安全路经Travel 【树链剖分】
  10. Delphi 为TClientdataset定义结果集,并增加记录
  11. 使用expect的自动化交互
  12. 车道线识别之 tusimple 数据集介绍
  13. Idea快捷键和使用技巧【未完】
  14. MyBatis笔记----(2017年)最新的报错:Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name &#39;dataSource&#39; defined in class path resource [com/ij34/mybatis/applicationContext.xml]; nested e
  15. 最长增长子序列(LIS)
  16. Django框架详细介绍---ORM---图书信息系统专题训练
  17. oracle存储过程结合我公司代码1
  18. Java基础—注解的使用
  19. 跳转iPhone设置页面,绕过审核
  20. strncpy 引起的思考,重新认识了strncpy这个函数【转】

热门文章

  1. 匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
  2. shell——eval exec
  3. Kubernets-初见
  4. IT职业技能图谱:架构师、H5、DBA、移动、大数据、运维...
  5. [LeetCode]7. 整数反转(Java)
  6. 多端开发之uniapp开发app
  7. Spring Boot自动配置实战
  8. Spring Security配置个过滤器也这么卷
  9. 云原生 PostgreSQL 集群 - PGO:5分钟快速上手
  10. [旧][Android] 代理模式