约瑟夫环Java语言代码 数据结构约瑟夫环代码java

java循环单链表实现约瑟夫环看了约瑟夫环Java语言代码你约瑟夫环Java语言代码的代码约瑟夫环Java语言代码,不是很明白 , 给你提几个建议吧约瑟夫环Java语言代码:
1、不需要tail节点
2、remove方法应该对删除节点前面约瑟夫环Java语言代码的节点操作,而不是使用数字找
给你我修改的LinkList类,你参考一下:
public class LinkList {
private Node head;
int curlen = 0;
// 创建链表
public void createlist(int code) throws Exception {
insert(curlen, code);
}
public void insert(int i, int code) throws Exception {
Node s = new Node(code);
if (i == 0) {
s.setNext(head);
head = s;
}
Node p = head;
int j = 0;
while (p != nullji - 1) {
p = p.getNext();
j++;
}
if (ji || p == null) {
throw new Exception("插入位置不合理");
}
s.setNext(p.getNext());
p.setNext(s);
//tail = s;
//tail.setNext(head);
curlen = curlen + 1;
}
public void remove(int i) throws Exception {
Node p = head, q = null;
int j = 0;
i = i - 1;
while (ji) {
q = p;
p = p.getNext();
j++;
}
if (ji || p == null)
throw new Exception("删除位置不合法");
if (q == null) {
//tail.setNext(p.getNext());
head = head.getNext();
} else
q.setNext(p.getNext());
curlen = curlen - 1;
}
/**
* 按照节点删除
* @param i
* @throws Exception
*/
public void remove(Node p) throws Exception {
if(p.getNext()==p){
p=null;
head=null;
}
else{
Node q = p.getNext();
p.setNext(q.getNext());
}
curlen = curlen - 1;
}
public void out(int m) throws Exception {
Node p = head;
if(m==1){
System.out.print("按照顺序出列");
return;
}
int count = 1;
int n=m-1;
while (curlen0) {
if (count == n) {
System.out.print(p.getNext().getData() + "");
remove(p);
count = 1;
} else {
count++;
}
p = p.getNext();
}
}
public void display() {
Node node = head;
for (int i = 0; i2 * curlen; i++) {
System.out.print(node.getData() + " ");
node = node.getNext();
}
System.out.println();
}
}
用java在数组中实现约瑟夫环的问题, 要求写明详细注释, 方法最好简单一点, 初学者,package ysfh;
/**
* 【约瑟夫环的问题】
* 有17个人(编号从1到16),按编号依次排列成一个圆环(编号16的接着编号为1 的人),从编号为1 的人开始报数,数到3的人退出圆环 , 如此循环,最后留下的那个人的编号是什么?
* 1,2,3,4 , 5,6,7,8 , ,9,10,11,12,13,14,15 , 16
* 要求:请用面向对象的思想来处理这个问题并在下面写出具体的代码(可以选择你熟悉的语言,如java/C++/C#等)
* @author Administrator
*
*/
public class Ysfh {
public static void main(String[] args) {
m(3,16);
}
public static void m(int m,int n){
int c = 1;
int[] ns = ntoarray(n);
while(isone(ns) == false){//如果数组中有一个以上的数不为0
for (int i = 0; ins.length; i++) {
if(ns[i] != 0 ){//等于0的都退出了 所以从所有不等于0的开始
if(c == m){//是第三个数给他赋值0 并让计数器c从1 开始
ns[i] = 0 ;
c = 1;
}else{//否则继续计数器下一个
c++;
}
}
}
}
//循环输出最后留下的数字
for (int i = 0; ins.length; i++) {
if(ns[i] != 0){//除0以外的数字 0代表删除

推荐阅读