#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处学习到该方法
}
数组模拟链表:

京公网安备 11010502036488号