约瑟夫环(为什么最后输出的出对序列是乱码,求高手修改,),该怎么处理

约瑟夫环(为什么最后输出的出对序列是乱码,求高手修改,急啊!!!)

#include<time.h>
#include<cstdlib>
#include<iostream>

using namespace std;

struct LNode
  {
  int num;
  int password;
  LNode *next; /*生成n个结点的单向循环链表 */
  };
  typedef LNode* LinkList;

void createList(LinkList &head,int);
void game(LinkList &head,int ,int );
void printList(LinkList head,int);
int n,m;
int main()
  {
  LinkList head;
  cout<<"请输出围圈人数: \n";
  cin>>n;
  cout<<"请给出一个上报限数: \n";
  cin>>m;
  while(n<1||m<1) //防止输入出错,增强强壮性
  {
  cout<<"输入人数有误,请重新输入:\n";
  cout<<"请输入参与人数:\n";
  cin>>n;
  cout<<"请给出一个上报限数: \n";
  cin>>m;
  }
  createList(head,n);
  printList(head,n);

  cout<<"出列的顺序如下:"<<endl;
  game(head,m,n);
  }
void createList(LinkList &head,int n)
  {
  int i,j;
  LinkList p=head,r;
  srand((int)time(0));
  for(i=0; i<n; i++)
  {
  j=1+(int)rand()%10;
  r=p;
  p=new LNode; /*创建新的结点*/
  p->num=i+1;
  p->password=j;
  r->next=p;
  }
  p->next=head->next;
  p=head;
  head=head->next;
}
void game(LinkList &head,int m,int n)
{
  int j;
  LinkList p,s;
  p=head;
  while(n>0)
  {
  for(j=1;j<m;j++)
  {
  s=p;
  s=s->next;
  p=p->next;
  }
  s->next=p->next;
  cout<<p->num<<" ";
  m=p->password;
  free(p);
  p=s->next;

  n--; /*每循环一次人是减1*/
  }
  cout<<endl;
}
void printList(LinkList head,int n)
{
  LinkList p=head;
  int i;
  for(i=0;i<n;i++)
  {
  cout<<"num:"<<p->num<<" "<<"password:"<<p->password<<endl;
  p=p->next;
  }

}


------解决方案--------------------
问题1:head没有进行初始化
问题2:方法game中注意注释掉的那行,多余的,会导致错误!
C/C++ code

#include<time.h>
#include<cstdlib>
#include<iostream>

using namespace std;

struct LNode
{
  int num;
  int password;
  LNode *next; /*生成n个结点的单向循环链表 */
};
typedef LNode* LinkList;

void createList(LinkList &head,int);
void game(LinkList &head,int ,int );
void printList(LinkList head,int);
int n,m;
int main()
 {
  LinkList head = new LNode;
  cout<<"请输出围圈人数: \n";
  cin>>n;
  cout<<"请给出一个上报限数: \n";
  cin>>m;
  while(n<1||m<1) //防止输入出错,增强强壮性
  {
  cout<<"输入人数有误,请重新输入:\n";
  cout<<"请输入参与人数:\n";
  cin>>n;
  cout<<"请给出一个上报限数: \n";
  cin>>m;
  }
  createList(head,n);
  printList(head,n);

  cout<<"出列的顺序如下:"<<endl;
  game(head,m,n);
   system("pause");
   return 0;
 }

void createList(LinkList &head,int n)
{
  int i,j;
  LinkList p=head,r;
  srand((int)time(0));
  for(i=0; i<n; i++)
  {
      j=1+(int)rand()%10;
      r=p;
      p=new LNode; 
      p->num=i+1;
      p->password=j;
      r->next=p;
  }
  p->next=head->next;
  p=head;
  head=head->next;
}
void game(LinkList &head,int m,int n)
{
  int j;
  LinkList p,s;
  p=head;
  while(n>0)
  {
      for(j=1;j<m;j++)
      {
          s=p;
          //s=s->next;
          p=p->next;
          
      }
      s->next=p->next;
      cout << p->num <<" ";
      m=p->password;
      free(p);
      p=s->next;

      n--;
  }
  cout<<endl;
}
void printList(LinkList head,int n)
{
  LinkList p=head;
  int i;
  for(i=0;i<n;i++)
  {
  cout<<"num:"<<p->num<<" "<<"password:"<<p->password<<endl;
  p=p->next;
  }

}