約瑟夫 環形鍊錶

2021-10-06 11:53:48 字數 1683 閱讀 6314

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 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...