/** * 約瑟夫 環形鍊錶解決 小孩丟手絹
* @author anqi
* @date 2020/4/15 09 54:59
* @description
*/public
class
josepfu
}//建立環形單向鍊錶
class
circlesinglelinkedlist
//建立乙個輔助指標 幫助完成小孩出圈
boy helper = first;
//將 helper 指向 鍊錶的最後乙個節點
while
(true
) helper=helper.
getnext()
;}//報數前 將first 和 helper 移動k-1次
for(
int j =
0;j< startno -
1;j++
)//報數時 同時移動countnum-1 知道圈中只有乙個節點
while
(true
)//移動countnum-1
for(
int j =
0;j1;j++
)//這時first指向的節點 就是要出圈的小孩的節點
system.out.
printf
("編號:%d 小孩出圈\n "
,first.
getno()
);//這時將first指向的小孩節點出圈
first = first.
getnext()
; helper.
setnext
(first);}
system.out.
printf
("最後留在圈中的小孩編號%d \n"
,first.
getno()
);}//遍歷鍊錶
public
void
showboy()
//輔助指標
boy curboy = first;
while
(true
) curboy = curboy.
getnext()
;//後移}}
//新增節點,構建環形鍊錶
public
void
add(
int nums)
boy curboy = null;
//輔助變數
//for 迴圈建立環形鍊錶
for(
int i =
1; i<= nums;i++
)else}}
}//建立乙個boy類,作為節點
約瑟夫問題 單向環形鍊錶
約瑟夫問題的示意圖 josephu 問題 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...
單向環形鍊錶(約瑟夫問題)
josephu 問題 josephu問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人 從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生 乙個出隊編號的序列。提示用乙個不帶頭結點的迴圈鍊錶來處理josep...
單向環形鍊錶 約瑟夫問題
如圖,鍊錶的最後乙個節點的next指向鍊錶的第乙個節點,形成乙個環形鍊錶。josephu 約瑟夫 約瑟夫環 問題 設編號為1,2,3 n的 n個人坐成一圈,編號為k 1 k n 的人從1開始報數,數到m的那個人出列,他的下一位繼續從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此...