约瑟夫环java代码实现,运用链表
时间: 2023-12-12 20:03:41 浏览: 86
好的,以下是约瑟夫环的Java代码实现,使用了链表:
```java
class Node { //定义节点类
int data;
Node next;
public Node (int data) {
this.data = data;
}
}
class JosephusCircle { //约瑟夫环类
Node head = new Node(1); //链表头结点默认为1
int size;
int target;
public JosephusCircle(int size, int target) {
this.size = size; //设定链表长度
this.target = target; //设定固定步长
Node cur = head;
for (int i = 2; i <= size; i++) { //生成链表
cur.next = new Node(i);
cur = cur.next;
}
cur.next = head; //让最后一个节点指向头结点形成一个环
}
public void execute() { //执行约瑟夫环
Node cur = head;
while (size > 1) { //当链表长度大于1时循环执行
for (int i = 1; i < target; i++) { //按步长移动节点
cur = cur.next;
}
System.out.print(cur.next.data + " "); //输出要删除的节点的值
cur.next = cur.next.next; //删除节点
size--; //链表长度减1
}
System.out.println("\nThe survivor is: " + cur.data); //输出最后幸存者的值
}
}
public class Main {
public static void main(String[] args) {
JosephusCircle jc = new JosephusCircle(7, 3); //初始化环
jc.execute(); //执行约瑟夫环
}
}
```
此处运用了链表来实现,首先生成长度为 size 的链表,然后将最后一个节点指向头结点,形成一个环。执行约瑟夫环时,按照题目指定的步长 target 移动节点,输出要删除的节点的值,并删除节点,同时将链表长度减1。当链表长度为1时,输出最后幸存者的值。
阅读全文