一开始想到的是用stl的vector标准库,想着这个效率不太好,要有很多查找操作,于是先百度了下,借鉴别人的思路
看到别人的博客说用vector做超时了,哈哈,果然跟我想的一样,看到他用自定义的struct node 实现链表,
我就自己独立编写出来了,在做双向表删除与插入时注意操作的先后顺序与完整型
#include <iostream>
using namespace std;
struct Node{
int right;
int left;
};
int main()
{
int testCase, num, cmdNum;
cin >> testCase;
while (testCase--){
cin >> num >> cmdNum;
Node* node = new Node [num + 2 ];
node[0].right = 1;
for (int i = 1; i <= num ; i++){
node[i-1].right = i;
node[i].left = i - 1;
}
node[num].right = 0;
//node[0].left = num; //这句可加可不加,加了是一个完整的环形链表
for (int i = 0; i < cmdNum; i++){
int cmd ,a,b;
cin >> cmd >> a >> b;
if (cmd == 1){
node[node[a].left].right = node[a].right;
node[node[a].right].left = node[a].left;
node[node[b].left].right = a;
node[a].left = node[b].left;
node[b].left = a;
node[a].right = b;
}
else if (cmd == 2){
node[node[a].left].right = node[a].right;
node[node[a].right].left = node[a].left;
node[a].right = node[b].right;
node[a].left = b;
node[node[b].right].left = a;
node[b].right = a;
}
}
int x = 0;
for (int i = 0 ; i < num; i++){
x = node[x].right;
cout << x << " ";
}
cout << endl;
}
return 0;
}