#include <iostream> const int N=55; using namespace std; int ne[N]; int m; int main() { cin>>m; while(m--) { int n; cin>>n; for(int i=1; i<n; i++) ne[i]=i+1;//用一个数组来模拟环形链表, ne[n]=1; //ne[N]存储链表下一个元素位置, //为了形成环形链表,让ne[n]=1 int p=n;//模拟指针,指向第一个元素的前一个元素 //链表中指向目标元素的前一个元素才可以进行删除与修改,方便操作。 for(int i=0; i<n; i++)//要建所有n个元素输出 { p=ne[ne[p]];//模拟链表的连续移动两次,从而指向第三个元素的前一个元素 cout<<ne[p]<<' ';//输出目标元素 ne[p]=ne[ne[p]];//模拟链表删除目标元素 } cout<<endl; } return 0; //本题做法非原创,作者由acwing相同题目yxc处学习到该方法 }
数组模拟链表: