單向環形鍊錶可以理解為單鏈表首尾相連的鍊錶.
遍歷
設編號為1,2,3......n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m的那個人出列,他的下一位從1開始報數,數到m的那個人又出列,以此類推,知道所有人出列為止,由此產生乙個出隊編號的序列.需要建立乙個輔助指標helper,事先應該指向環形鍊錶的最後乙個節點 (遍歷實現 結束條件 helper.next = first)
報數前,先讓first和helper移動k-1次 (這是題中的從第k個人開始報數)
當小孩報數時,讓first和helper指標同時移動m-1次
這時就將first指向的小孩出圈.
public class circlelinkedlist
}//迴圈鍊錶
class circlelinked
boy curboy = null; // 新增輔助指標
for (int i = 1;i <= num;i++)else }}
//顯示鍊錶
public void list()
boy curboy = first;
while (true)
curboy = curboy.getnext();}}
/***
* @param n 總共有多少和小孩
* @param k 從第幾個人開始報數
* @param m 數幾下
*/public void countboy(int n,int k,int m)
boy helper = first;
//helper指向環形鍊錶的最後乙個節點
while (true)
helper = helper.getnext();
}///小孩報數前,先讓 first 和 helper 移動 k - 1 次
for (int i = 0;i < k-1;i++)
while (true)
//first 和 helper 移動m-1此
for (int i = 0;i < m-1;i++)
//出圈小孩
system.out.printf("出圈編號為%d\n",first.getno());
first = first.getnext();
helper.setnext(first);
}system.out.printf("出圈編號為%d\n",first.getno());
}}class boy
public int getno()
public boy getnext()
public void setnext(boy next)
}
單向環形鍊錶
問題描述 設編號為 1,2,3,4 n的n個人圍坐一圈,約定編號為第k 1 k n 的那個人,從1開始報數,數到m的那個人出列,它的下一位又開始從1報數,數到m的那個人又出列,依次類推,知道所有人出列為止,由此產生了乙個出隊編號的序列。建立環形鍊錶並且遍歷 實現 public class josep...
單向環形鍊錶
一 單向環形鍊錶的結構 二 單向環形鍊錶的使用場景 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的...
單向環形鍊錶
建立孩子節點 孩子節點 class child public intgetno public void setno int no public child getnext public void setnext child next 建立環形鍊錶類,讓first節點為空 class circleli...