約瑟夫問題(鏈式結構)
阿新 • • 發佈:2019-01-13
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); } }