1 6 單向環形鍊錶和約瑟夫問題

2022-07-06 00:48:13 字數 1314 閱讀 8910

約瑟夫問題

實現思路

**實現

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...