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 設定並刪除該位...