單向環形鍊錶解決約瑟夫問題

2021-10-11 01:39:23 字數 1788 閱讀 2505

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 ...