删除并重新排队
给定按从小到大的顺序排列的数字 1 到 n,随后对它们进行 m 次操作,每次将一个数字 x 移动到数字 y 之前或之后。请问完成这 m 次操作后它们的顺序是什么?
每次输入3 个数, x、y、z。当 z = 0 时,将 x 移动到 y 之后;当 z = 1 时,将 x 移动到 y 之前。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
list<int> lis;
for (int i = 1; i <= n; i++)
lis.push_back(i); //链表赋值
while(m--) {
int x, y, z;
cin >> x >> y >> z;
lis.remove(x); //删除x
list<int>::iterator it = find(lis.begin(), lis.end(), y); //找到y
//上一句可以把 list<int>::iterator it 改为 auto it
if (z == 0) lis.insert(++it, x); //x放在y后面
if (z == 1) lis.insert(it, x); //x放在y前面
}
for (int x : lis)
cout << x << " ";
cout << endl;
return 0;
}