package com.mjw.linkedlist;
/** * @author 拾光
* */
public
class
josepfu
}//建立環形鍊錶
class
circlelinkedlist
boy curboy=null;
//輔助指標,幫助構建
//迴圈建立
for(
int i=
1;i<=nums;i++
)else}}
/** * 根據使用者的輸入,出圈
* @param startno表示從第幾個開始,
* @param countnum表示數幾下
* @param nums表示有幾個小孩在內
*/public
void
countboy
(int startno,
int countnum,
int nums)
//建立輔助指標,幫助出圈
boy helper=first;
//需求建立乙個輔助指標helper,事先應該指向鍊錶的最後這個結點
while
(true
) helper=helper.
getnext()
;}//報數之前,先讓helper和first移動k-1次
for(
int j=
0;j1;j++
)//報數之前,先讓helper和first移動m-1次,然後出圈
//迴圈操作,直到圈中z只有乙個結點
while
(true
)//helper和first移動countnum-1次
for(
int j=
0;j1;j++
)//這時first指向的就是出圈的結點
system.out.
println
("小孩no是:"
+first.
getno()
+"出圈");
//出圈
first=first.
getnext()
; helper.
setnext
(first);}
system.out.
println
("留在圈中的小孩編號:"
+first.
getno()
);}/**
* 遍歷環形鍊錶
*/public
void
show()
//因為first不可以動,我們使用輔助指標完成遍歷
boy curboy=first;
while
(true
)//後移
curboy=curboy.
getnext()
;}}}
//建立結點
class
boypublic
intgetno()
public
void
setno
(int no)
public boy getnext()
public
void
setnext
(boy next)
}
環形鍊錶 約瑟夫問題
問題描述josephu問題 設編號為1,2,3 n的n個人圍坐成一圈,約定編號為k的人從1開始報數,數到m的那個人出列,他的下一位從1開始報數,數到m那個人又出列,直到所有人都出列為止,由此產生乙個出佇列編號的序號。解決方法 建立乙個輔助指標helper,指向頭指標的前乙個節點 當小孩報數的時候,f...
Java環形鍊錶 約瑟夫問題
n個小孩圍成圈,丟手帕,從第start個小孩開始丟,每到第step個小孩出局 接著從下乙個小孩開始,直到最後乙個小孩為止,遊戲結束。author jiaozl cyclink cyclink new cyclink cyclink.setlen 5 cyclink.createlink cyclin...
約瑟夫問題 單向環形鍊錶
約瑟夫問題的示意圖 josephu 問題 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...