單向環形鍊錶

2022-09-15 19:42:16 字數 1485 閱讀 7003

單向環形鍊錶可以理解為單鏈表首尾相連的鍊錶.

遍歷

設編號為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...