约瑟夫问题(链式结构)

版权声明:转载请说明去处,文章仅供学习参考 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);

	}

}

猜你喜欢

转载自blog.csdn.net/qq_38487155/article/details/86361682