迴圈單鏈表 Joseph約瑟夫環問題

2021-10-09 02:55:01 字數 1572 閱讀 2231

package com.linkedlist;

/*@author qw

@date 2020/8/11 - 22:02

**/public

class

josephcircle

}//迴圈單鏈表

class

circlesinglelinkedlist

child cur = null;

//輔助指標,幫助構建迴圈鍊錶

for(

int i =

1; i <= nums; i++

)else}}

//遍歷鍊錶

public

void

show()

child cur = first;

//輔助指標,幫助遍歷

while

(true

) cur = cur.next;

//cur後移}}

/** *

* @param startno 從第幾個小孩開始數數

* @param countnum 數幾下

* @param nums 最初圈中的小孩總數

*///計算出圈順序

public

void

countchild

(int startno,

int countnum,

int nums)

child helper = first;

//輔助指標,幫助出圈

//令helper指向圈中最後乙個結點

while

(true

) helper = helper.next;

}//報數前,先讓first和helper移動startno-1次,讓first指向開始結點

for(

int i =

0; i < startno -

1; i++

)//報數時,first和helper同時移動countnum-1次,然後出圈

while

(true

)for

(int i =

0; i < countnum -

1; i++

)//此時first指向要出圈的小孩

system.out.

printf

("小孩%d出圈\n"

, first.no)

;//讓當前first出圈

first = first.next;

//first後移

helper.next = first;

//helper指向新first,此時原first已被刪除

} system.out.

printf

("最後留在圈中的小孩編號為%d\n"

, first.no);}

}//結點類

用迴圈單鏈表解決約瑟夫(Joseph)問題

用迴圈單鏈表解決約瑟夫 joseph 問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該...

用迴圈單鏈表解決約瑟夫(Joseph)問題

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

採用迴圈單鏈表實現約瑟夫環

演算法的基本思想 利用鍊錶和陣列,約瑟夫環問題中的資料時人所在的位置,而這個資料時存在 第一元素 最後元素 並且 存在唯一的前驅和後繼,符合線性表的特點,由於需要模擬約瑟夫環的出列問題,可以採用順序表來實現 線性表,完成出列順序的輸出,核心演算法主要分兩步 1 確定需要刪除的位置 2 設定並刪除該位...