用java实现约瑟夫(Joseph)环输入数据:建立输入函数处理输入的数据,输入m的初值n,输入每个人的密码,建立单向循环链表。
时间: 2024-02-27 20:51:40 浏览: 64
JAVA实现约瑟夫环
下面是Java实现约瑟夫环的代码,包括输入函数和单向循环链表的实现:
```java
import java.util.Scanner;
public class JosephCircle {
static class Node {
int number; // 节点编号
int password; // 节点密码
Node next; // 下一个节点
public Node(int number, int password) {
this.number = number;
this.password = password;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入m的初值:");
int m = scanner.nextInt();
System.out.print("请输入人数n:");
int n = scanner.nextInt();
Node head = null, prev = null;
for (int i = 1; i <= n; i++) {
System.out.print("请输入第" + i + "个人的密码:");
int password = scanner.nextInt();
Node node = new Node(i, password);
if (i == 1) {
head = node;
} else {
prev.next = node;
}
prev = node;
}
prev.next = head; // 链表首尾相连
int index = 0;
while (head.next != head) {
for (int i = 1; i < m - 1; i++) {
head = head.next; // 找到要删除节点的前一个节点
}
Node node = head.next; // 要删除的节点
System.out.println("删除:" + node.number + "号,密码为:" + node.password);
head.next = node.next; // 删除节点
head = head.next; // 下一个节点成为新的头结点
}
System.out.println("最后留下:" + head.number + "号");
}
}
```
在这个程序中,我们使用了一个`Node`类来表示链表中的节点,包括节点编号`number`、节点密码`password`和指向下一个节点的指针`next`。输入函数利用`Scanner`类从标准输入读取数据,并按顺序构造单向循环链表。在程序的主要逻辑中,我们按照要求从链表中删除节点,直到只剩下一个节点。最后留下的节点即为答案。
阅读全文