Java代码创建一个双链表,方法体只在public static void main去解决一个简单的约瑟夫环问题,写出出列的每个数以及最后留下的数
时间: 2024-05-04 12:17:51 浏览: 7
好的,我理解了。以下是Java代码创建双链表并解决约瑟夫环问题的代码:
```java
import java.util.Scanner;
public class DoubleLinkedList {
static class Node {
int data;
Node next;
Node prev;
Node(int data) {
this.data = data;
next = null;
prev = null;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, k;
System.out.print("请输入 n:");
n = sc.nextInt();
System.out.print("请输入 k:");
k = sc.nextInt();
// 创建双链表
Node head = new Node(1);
Node tail = head;
for (int i = 2; i <= n; i++) {
Node newNode = new Node(i);
tail.next = newNode;
newNode.prev = tail;
tail = newNode;
}
tail.next = head;
head.prev = tail;
// 解决约瑟夫环问题
Node curr = head;
int count = 1;
while (head != tail) {
if (count == k) {
System.out.print(curr.data + " ");
curr.prev.next = curr.next;
curr.next.prev = curr.prev;
curr = curr.next;
count = 1;
} else {
curr = curr.next;
count++;
}
}
System.out.println(curr.data + "是最后留下的数字");
}
}
```
在程序运行时,会要求你输入 n 和 k,分别表示双链表中节点个数和每隔 k 个节点删除一个节点。程序会计算出出列的每个数并输出,最后输出最后留下的数字。
希望这个代码能够解决你的问题。