样例输入
8
3
3 2
8 -3
3 -2
样例输出
1 2 4 3 5 8 6 7
思路:移动过程中,涉及到元素在中间位置的插入和删除,list容器是最佳选择;先遍历整个链表找到要移动的元素的位置,并将该元素删除,然后将迭代器进行递增递减运算(或者利用迭代器辅助函数advance),找到要移动之后的位置,将该元素插入。
notice:list的迭代器不支持+、- 运算符,但支持++、-- 运算符;
code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,id,move;
list<int> Stu;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
Stu.push_back(i);
}
while(m--)
{
cin>>id>>move;
list<int>::iterator iter=find(Stu.begin(),Stu.end(),id);
iter=Stu.erase(iter);//删除iter所指元素 返回迭代器指向下一个元素;
advance(iter,move);//利用迭代器辅助函数向后移动move个坐标
Stu.insert(iter,id);//移动后插入
}
list<int>::iterator iter;
for(iter=Stu.begin();iter!=Stu.end();++iter)
cout<<*iter<<" ";
return 0;
}