public class josepfu
}//建立乙個環形的單向鍊錶
class circlesinglelinkedlist
boy curboy = null;//輔助指標,幫助構建環形鍊錶
//使用for迴圈建立環形鍊錶
for(int i=1;i<=nums;i++)else }}
//遍歷當前的環形鍊錶
public void showboy()
//因為first不能動,因此文明仍然使用乙個輔助指標完成遍歷
boy curboy = first;
while(true)
curboy = curboy.getnext();}}
//根據使用者的輸入,計算出小孩出圈的順序
/*/**
*@author: diandian.yi on 2020/5/25 14:50
*@params: [startno表示從第幾個小孩開始數數, countnum表示數記下, nums表示最初有多少個小孩在圈中]
*@return: void
*@description:
*/public void countboy(int startno,int countnum,int nums)
//建立要給輔助指標,幫助小孩出圈
boy helper = first;
// 事先應該指向環形鍊錶的最後乙個節點
while (true)
helper = helper.getnext();
}// 移動到第k個節點,first和helper移動k-1次
for(int j=0;j// 2.當小孩報數時,讓first和helper指標同時的移動m-1次
//這裡是乙個迴圈操作,直到圈中只有乙個節點
while(true)
// 2.當小孩報數時,讓first和helper指標同時的移動countnum次
for(int j=0;j//first是要出圈的節點
system.out.printf("小孩%d出圈\n",first.getno());
//這時將first指向的小孩節點出圈
first = first.getnext();
helper.setnext(first);
}system.out.printf("最後乙個小孩節點%d \n",first.getno());
}}//建立乙個boy類,表示乙個節點
class boy
public int getno()
public void setno(int no)
public boy getnext()
public void setnext(boy next)
}
丟手帕問題的雙向環形鍊錶實現
問題 設編號為1 2 n的幾個小孩圍坐一圈,約定編號為k 1 我們現在用乙個雙向環形鍊錶來解這一問題。先來看看下面這幅圖 圓圈代表乙個結點,紅色的指標指向下乙個元素,紫色的指標指向上乙個元素。first指標指向第乙個元素,表明第乙個元素的位置,cursor是游標指標,它的作用重大。那麼這個環形的鍊錶...
約瑟夫問題 單向環形鍊錶
約瑟夫問題的示意圖 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...