
思路:简单模拟;list为双向循环链表,插入删除时间复杂度为O(1)
#include <bits/stdc++.h>
using namespace std;
list<int>l;//存储学号的链表
int main() {
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)l.push_back(i);
while(m--){
int p,q;cin>>p>>q;
list<int>::iterator i=l.begin();
while(*i!=p)++i;//指针移动到编号为p的元素处
i=l.erase(i);//删去并返回指针
while(q<0){//移动指针
--i;++q;
}
while(q>0){
++i;--q;
}
l.insert(i,p);//插入
}
for(list<int>::iterator i=l.begin();i!=l.end();++i)
cout<<*i<<' ';
return 0;
}
双向循环链表模拟算法
本文介绍了一种使用双向循环链表进行模拟的算法实现,通过C++代码演示了如何在链表中进行元素的插入和删除操作,适用于需要快速响应元素变更的数据结构场景。
2508

被折叠的 条评论
为什么被折叠?



