約瑟夫問題
實現思路
**實現
public class circlesinglelinkedlistdemo
}// 單向環形鍊錶類
class circlesinglelinkedlis
children current = null; // 尾指標 指向下乙個節點為頭節點的節點(方便插入,不需要每次都遍歷)
for (int i = 1; i <= number; i++) else }}
// 顯示單向環形鍊錶
public void show()
children temp = head;
while (null != head) }}
// 獲取鍊錶節點個數
public int size()
}return sum;
}/**
* 約瑟夫問題實現(一群小孩圍在一起,由第k個小孩報n下數,停止報數的那個小孩出圈,問小孩出圈的順序)
* 採用兩個指標(乙個指向當前報數的孩子,另乙個指向報數孩子的前乙個孩子,因為單鏈表刪除必須拿到當前節點的前乙個節點)
* @param start 開始報數的節點
* @param count 報多少下
* @param size 總共有多少個小孩(此處不能大於鍊錶的有效個數)
*/public void josephu(int start, int count, int size)
children current = head; // 當前節點
children currentbefore = current; // 當前節點的前乙個節點
while (currentbefore.next != head)
for (int i = 0; i < start - 1; i++)
while (current != currentbefore)
// 報數完畢 移除當前節點 並重新構建鍊錶
system.out.println(current);
current = current.next; // 後移當前指標
currentbefore.next = current; // 重新構建鍊錶
}system.out.println(current); // 輸出圈中最後乙個節點的資訊
}}// 鍊錶節點類
class children
@override
public string tostring() ';
}}
單向環形鍊錶和約瑟夫問題
當n 5 m 2,k 1時出佇列的順序 2 4 1 5 3 乙個節點也能形成環鏈 構建乙個單向的環形鍊錶思路 1.先建立第乙個節點,讓first指向該節點,並形成環形.2.後面當我們每建立乙個新的節點,就把該節點,加入到已有的環形鍊錶中即可.public void addnode int nums ...
約瑟夫問題 單向環形鍊錶
約瑟夫問題的示意圖 josephu 問題 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...
單向環形鍊錶(約瑟夫問題)
josephu 問題 josephu問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人 從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生 乙個出隊編號的序列。提示用乙個不帶頭結點的迴圈鍊錶來處理josep...