版权声明:转载请说明去处,文章仅供学习参考 https://blog.csdn.net/qq_38487155/article/details/86361682
package Linear;
/*
* (链式结构)
* 约瑟夫问题:n个人围坐在一张桌子上,从第s个人开始数,数第m个人,该人出局。
* 从下一个人开始数,数第m个人,该人出局。。。循环往复直至所有人出局
*/
public class K {
public static void yuesefuTwo(Node h,int n,int s,int m) {
int i=0;
Node p =h;
Node pre=h; //pre永远指向p的前一结点
while (i<s) {
p=p.next;
i++;
}
while (pre.next!=p) {
pre=pre.next;
}
System.out.println(p.data);
while (n!=0) {
i=0;
while (i<m-1) {
p=p.next;
pre=pre.next;
i++;
}
if (n!=1) { //删除p结点
pre.next=p.next;
System.out.println(p.data);
p=null;
p=pre.next;
n--;
}else { //当n==1(即只有最后一个结点时,p和pre指向同一结点):删除最后一个结点
System.out.println(p.data);
p=null;
pre=null;
break;
}
}
}
public static void main(String[] args) {
Node h =NodeTool.CreateNodeList("12345");
Node p =h;
while (p.next!=null) {
p=p.next;
}
p.next=h.next;
yuesefuTwo(h, 5, 3, 2);
}
}