思路:
建立乙個環形的單向鍊錶
class
circlesinglelinkedlist
boy curboy = null; //
輔助指標,幫助構建環形鍊錶
//使用for來建立我們的環形鍊錶
for (int i = 1; i <= nums; i++) else}}
//遍歷當前的環形鍊錶
public
void
showboy()
//因為first不能動,因此我們仍然使用乙個輔助指標完成遍歷
boy curboy =first;
while (true
) curboy = curboy.getnext(); //
curboy後移
} }
//根據使用者的輸入,計算出小孩出圈的順序
/***
* @param
startno
* 表示從第幾個小孩開始數數
* @param
countnum
* 表示數幾下
* @param
nums
* 表示最初有多少小孩在圈中
*/public
void countboy(int startno, int countnum, int
nums)
//建立要給輔助指標,幫助完成小孩出圈
boy helper =first;
//需求建立乙個輔助指標(變數) helper , 事先應該指向環形鍊錶的最後這個節點
while (true
) helper =helper.getnext();
}//小孩報數前,先讓 first 和 helper 移動 k - 1次
for(int j = 0; j < startno - 1; j++)
//當小孩報數時,讓first 和 helper 指標同時 的移動 m - 1 次, 然後出圈
//這裡是乙個迴圈操作,知道圈中只有乙個節點
while(true
)
//讓 first 和 helper 指標同時 的移動 countnum - 1
for(int j = 0; j < countnum - 1; j++)
//這時first指向的節點,就是要出圈的小孩節點
system.out.printf("小孩%d出圈\n", first.getno());
//這時將first指向的小孩節點出圈
first =first.getnext();
helper.setnext(first); //}
system.out.printf("最後留在圈中的小孩編號%d \n", first.getno());
}}//
建立乙個boy類,表示乙個節點
class
boy
public
intgetno()
public
void setno(int
no)
public
boy getnext()
public
void
setnext(boy next)
}
約瑟夫 環 問題 Josephu 單向環形鍊錶
建立人 wdl 建立時間 2021 3 19 描述 public class josepfu 建立乙個環形的單向鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標,幫助我們構建環形鍊錶 使用for來建立我們的環形鍊錶 for int i 1 i ...
環形鍊錶 約瑟夫問題
問題描述josephu問題 設編號為1,2,3 n的n個人圍坐成一圈,約定編號為k的人從1開始報數,數到m的那個人出列,他的下一位從1開始報數,數到m那個人又出列,直到所有人都出列為止,由此產生乙個出佇列編號的序號。解決方法 建立乙個輔助指標helper,指向頭指標的前乙個節點 當小孩報數的時候,f...
單向環形鍊錶與約瑟夫問題
總結單向環形鍊錶,也就是單向迴圈鍊錶,也就是在單鏈表的基礎上,將尾節點的next指標指回頭節點,形成乙個環 和單鏈表一樣的實現,沒什麼好說的額 鍊錶節點 class node2 public intgetno public void setno int no public node2 getnext...