此程序是一个约瑟夫环的问题,但是我写的程序不知道为什么,
总是连接有错误,
希望谁能帮我在原程序的基础上改动一下。谢谢。




#include <iostream>
#include <malloc.h> 
#include <memory.h>
using namespace std;
 int Joseph(int n,int s,int m);
typedef struct Lnode
{
    int number;
    struct Lnode  *next;
}LinkList;
int n,s,m;
void main()
{
  cout<<"有n个人在圆桌周围,从第s个开始报数,数到第m的人出列";
  cin>>n>>s>>m;
Joseph(n, s, m);
}
int Joseph(int n,int s,int m)
{//约瑟夫环问题
    int i,j;
    LinkList  *creatlinklist(int n);
    LinkList  *h,*p,*q,*r;
    if(n<s)   return 0;
    h=creatlinklist(n);
    q=h;
    for(i=1;i<s;i++)
    q=q->next;
    p=q->next;
    for(i=1;i<n;i++)
    {
        for(j=1;j<m;j++)
            if((q->next!=NULL)&&(p->next!=NULL))
            {
               q=q->next;
               p=q->next;
            }
            else
                if(p->next==NULL)
                {
                  q=q->next;
                  p=h->next;
                }
            else
            {
              q=h->next;
              p=p->next;
            }
      cout<<p->next<<endl;
      r=p;
      if(p->next==NULL)
      {
        p=h->next;
        q->next=NULL;
      }
      else
      {
        p=p->next;
        if(q->next!=NULL)
            q->next=p;
        else
            h->next=p;
      }
      free(r);
    }
    cout<<(h->next)->number<<endl;
}