package com.xkp.data.linkerlist;
/** * @author xkp
* @version 1.0
* @classname josepfu
* @description 單向環形煉表處理約瑟夫問題
* @date 2020/11/30 0030 23:12
**/public
class
josepfu
}class
circlesinglelinkedlist
//輔助指標
boy curboy = null;
for(
int i =
1; i <= nums; i++
)else}}
/** * 顯示boy
*/public
void
showboy()
boy curboy = first;
while
(true
)//當前指標後移
curboy = curboy.
getnext()
;}}/**
* 根據使用者輸入,計算出小孩出圈序列
** @param startno 表示從第幾個小孩開始數數
* @param countnums 表示數幾下
* @param nums 表示小孩總數
*/public
void
countboy
(int startno,
int countnums,
int nums)
boy helper = first;
//首先使helper指向最後節點
while
(true
) helper = helper.
getnext()
;}//小孩報數前先讓first和helper移動startno-1次
for(
int j =
0; j < startno -
1; j++
)//當小孩報數時,讓first和 helper移動m-1次,然後出圈
//迴圈直到圈中只有乙個人(helper==first)
while
(true
)for
(int i =
0; i < countnums -
1; i++
) system.out.
printf
("小孩%d出圈\n"
, first.
getno()
);//這時將first指向的小孩出圈
first=first.
getnext()
; helper.
setnext
(first);//
} system.out.
printf
("最後留在圈中的小孩%d出圈\n"
,helper.
getno()
);}}
class
boypublic
void
setno
(int no)
public
boy(
int no)
public boy getnext()
public
void
setnext
(boy next)
}
環形鍊錶解決約瑟夫問題
使用for來建立我們的環形鍊錶 boy curboy null 輔助指標。幫助構建環形鍊錶 for迴圈建立環形鍊錶 for int i 1 i nums i else 遍歷當前的環形鍊錶 public void showboy 因為first不能動,因此我們任然使用乙個輔助指標來完成 boy cur...
環形鍊錶解決約瑟夫問題 小孩出圈
public class josepfu 建立乙個單向的環形鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標 for int i 1 i nums i else 遍歷當前迴圈鍊錶 public void showboy 因為first不動,我們...
用單選環形鍊錶解決約瑟夫問題
package 演算法.單向鍊錶和雙向鍊錶的建立和遍歷.約瑟夫問題之單向環形鍊錶 public class josephu 建立乙個單向環形鍊錶 class circlelinkedlist boy curboy null for int i 1 i nums i else public void ...