试了一下数组实现的双向链表,是挺难用的,估计是应该写个get_next()函数比直接用next数组好。
#include<bits/stdc++.h> using namespace std; #define ll long long int _next[101]; int _prev[101]; int n,m; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<n-1;i++){ _next[i]=(i+1)%n; _prev[(i+1)%n]=i; } _next[n-1]=n; _prev[n]=n-1; _next[n]=1; _prev[1]=n; int cntm=0; int cntn=n; int i=1; while(cntn){ cntm++; /*cout<<"i="<<i<<" cntm="<<cntm<<endl; for(int j=1;j<=10;j++){ printf("%d ",_next[j]); } printf("\n"); for(int j=1;j<=10;j++){ printf("%d ",j); } printf("\n\n");*/ if(cntm==m){ _next[_prev[i]]=_next[i]; _prev[_next[i]]=_prev[i]; printf("%d%c",i," \n"[cntn==1]); cntm=0; cntn--; } i=_next[i]; } }
原文:https://www.cnblogs.com/Yinku/p/10317761.html