ヨセフの問題が概説します
1つの番号オフから始まるサークルの人々の束、この円のうち報告5人の場合、去る人々が再び最初からカウントオフ、そして最後には、残りの人に尋ねました。
ソリューション
カウント== 5、削除ノードに遭遇した場合に一方向円形のリンクリストは、whileループで、残りの1つ(head.next =ヘッド)の前に、、、サイクルの際に端部を再び1からカウントを開始するカウントヘッドの残りの部分は最後の人であるとき
小さな詳細
ノード削除円形リストはノードの前に知らなければならないとき、ライトサイクル注意を払う必要性が確保するときには、現在のノードと現在のノードの前のノード間でのすべてのループ。
コードの実装
package primDataStructure;
public class josephuQuestion {
class cirNode{
private String name;
public cirNode next;
public String getName() {
return name;
}
public void deleteNext(cirNode preNode) {
preNode.next=this.next;
}
public cirNode(String name) {
this.next=this;
this.name=name;
}
}
public void solution() {
cirNode head=new cirNode("同学0");
for(int i=1;i<30;i++) {
cirNode node=new cirNode("同学"+i);
node.next=head.next;
head.next=node;
}
int count=1;
cirNode preNode=head;
while(head.next!=head) {
preNode=head;
head=head.next;
System.out.println(head.getName()+"叫号为"+count);
if(count==5) {
System.out.println(head.getName()+"叫到5,出列");
count=1;
head.deleteNext(preNode);
}
count++;
}
System.out.println("最后剩下了"+head.getName());
}
public static void main(String args[]) {
josephuQuestion question=new josephuQuestion();
question.solution();
}
}