用單向環形鍊錶實現約瑟夫環

2021-09-02 02:43:07 字數 780 閱讀 5534

n個人圍成乙個環,從第乙個人開始,有1至m不斷報數,,凡報到m的出列,直到環中只剩下乙個人為止,輸出最後乙個人的序號。

如果要用鍊錶實現,很容易想到要建立單向環形鍊錶,及將尾節點中的next指標賦值為頭節點的位址。然後從頭節點開始遍歷,如果遇到符合條件的節點,對其進行鍊錶刪除處理,並將n減1,直到n為1時停止遍歷。

下面是該問題的帶有注釋的完整**:

#include

using

namespace std;

int n, m, count;

struct node

;//每個節點的結構

void

createlist

(node *

&head)

p->next = head;

//將尾節點中的next賦值為頭節點的位址,建立單向環形鍊錶

}int

ans(node *head)

//進行鍊錶中節點刪除處理

else

head = head-

>next;

}return head-

>num;

//返回剩下的乙個人的序號

}int

main()

其實,當進行節點刪除處理時,如果等到count%3==0時在進行處理,會比較麻煩,但如果在(count+1)%3==0時進行處理,及當即將要刪除的節點時當前所在節點的下乙個節點時,會容易得多。

約瑟夫 環 問題 Josephu 單向環形鍊錶

建立人 wdl 建立時間 2021 3 19 描述 public class josepfu 建立乙個環形的單向鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標,幫助我們構建環形鍊錶 使用for來建立我們的環形鍊錶 for int i 1 i ...

約瑟夫問題 單向環形鍊錶

約瑟夫問題的示意圖 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...