各位前辈们好,我有个java 循环链表 josephus环的问题请教各位

CGF2016 2016-10-10 01:18:31
我在oj上答题,这道题一直过不了,是分别输入总人数,开始报数的编号,报到多少的人出列,可能有空指针或数组越界,但找不到原因,前辈们有时间的话帮忙帮我看一下,谢谢。

import java.util.Scanner;

public class _04_Josephus {

class Node {
int data;
Node next;
Node(int data) {this.data = data;}
}

private Node head;
//private int size; // 元素个数

public _04_Josephus() {
Scanner scan = new Scanner(System.in);
// 读入总人数
int n = scan.nextInt(); scan.nextLine();
// 读入开始的编号
int k = scan.nextInt(); scan.nextLine();
// 读入数到m的那个人出列
int m = scan.nextInt();

// 构造约瑟夫环 <Right>
head = new Node(1); // 注意从1开始
Node node = head;
for (int i = 1; i < n; i++) {
node.next = new Node(i+1);
node = node.next;
}
node.next = head; // 形成环

// 移动tip到指定开始位置 <Right>
Node tip = head;
for (int i = 1; i < k; i++)
tip = tip.next;
// 报数出列
int num = 1;
while (n > 1) {
if (num == m-1) { // 到出列元素的前一个
System.out.println(tip.next.data); // 打印出队编号
tip.next = tip.next.next; // 删除元素
n--; // 个数减1
tip = tip.next;
num = 1; // 重新开始报数
} else {
tip = tip.next;
num++;
}
}
// 输出结果
System.out.println(tip.data);

}

public static void main(String[] args) {
_04_Josephus op = new _04_Josephus();
}

}//end_class
...全文
135 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,542

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧