java实现 链表 - 约瑟夫环模拟
时间: 2023-09-10 17:14:23 浏览: 151
下面是Java实现链表-约瑟夫环模拟的示例代码:
```
import java.util.*;
public class LinkedListDemo {
public static void main(String[] args) {
int n = 7; // 约瑟夫环总人数
int m = 3; // 数到第几个人出圈
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
System.out.println("初始链表:" + list);
int count = 0;
int index = 0;
while (list.size() > 1) {
int num = list.get(index);
count++;
if (count == m) {
list.remove(index);
System.out.println("出圈的人:" + num);
count = 0;
} else {
index++;
}
if (index >= list.size()) {
index = 0;
}
}
System.out.println("剩余的人:" + list.get(0));
}
}
```
运行结果:
```
初始链表:[1, 2, 3, 4, 5, 6, 7]
出圈的人:3
出圈的人:6
出圈的人:2
出圈的人:7
出圈的人:5
出圈的人:1
剩余的人:4
```
说明:
1. 首先创建一个LinkedList对象,用来存放约瑟夫环中的人;
2. 循环添加n个人到链表中;
3. 如果链表中还有人,则继续循环;
4. 每次数到第m个人,就将该人从链表中移除,并输出该人的编号;
5. 如果链表中的当前位置已经是最后一个元素,则将当前位置重置为0;
6. 最终剩下的一个人即为约瑟夫环的胜利者。
阅读全文