手动写一个循环链表,算是复习了一遍吧。。被指针弄得烦死。
#include<iostream>
#include<cstdio>
using namespace std;
struct List{
int data;
bool tag;
List *next;
List():data(0),tag(true),next(NULL){}
};
int n,m;
int main()
{
List* head;
head=new List();
head->data=1;
List* cnt=head;//利用循环链表做
scanf("%d%d",&n,&m);
if(n==0)return 0;
for(int i=2;i<=n;i++)
{
List* l;
l= new List();
l->data=i;
cnt->next=l;
cnt=l;
}
cnt->next=head;//将尾结点指向头结点形成循环链表
List* p=cnt;
while(p->next!=p)//当该节点的下一个指向的不是自己,就继续进行操作
{
for(int i=0;i<m-1;i++)
p=p->next;
List* d=p->next;
printf("%d ",d->data);
p->next=d->next;
delete d;
}
printf("%d ",p->data);//输出最后一个
return 0;
}