1. 程式人生 > >約瑟夫環 單向迴圈連結串列實現

約瑟夫環 單向迴圈連結串列實現

約瑟夫環 已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

///迴圈連結串列實現
#include<bits/stdc++.h>
using namespace std;
typedef struct List
{
    int data;
    struct List *next;
} node;
int main()
{
    node *head,*r,*s;
    head = new node;///
帶來頭結點,不過後面會去掉 r =head; int n,i; int k; cin>>n>>k; ///建立迴圈連結串列 for(i = 1; i<=n; i++) { s = new node; s->data = i; r->next = s; r= s; } r->next =head->next;///為節點指向頭結點的下一個有資料的結點
node *p,*p1; p = head->next;///去掉頭結點 delete head; while(p->next != p)///當連結串列中只有一個結點時停止 { for(i = 1; i<k-1; i++)///遍歷到第k個時停止 { p = p->next; } p1=p->next;///刪除該結點 p->next = p->next->next;
delete p1; p = p->next; } cout<<p->data<<endl; delete p; return 0; }