题目链接如下:L2-002 链表去重
WA了测试点2,调了两三个小时,初步判断是链表出了问题,但是我一直找不到QAQ。
代码如下:
#include <bits/stdc++.h>
using ll = long long;
#define endl '\n'
void solve(){
std::vector<int> l(100002, -1), r(100002, -1), v(100002);
int head, n;
std::cin >> head >> n;
std::set<int> s;
std::vector<int> del;//被删除的元素
int x, y, z;
for(int i = 0; i < n; i++){
std::cin >> x >> y >> z;
v[x] = y;
r[x] = z;
if(r[x] != -1) l[r[x]] = x;
}
x = head;
while(x != -1){
if(s.count(abs(v[x]))){//出现重复,删除它
if(l[x] != -1){
r[l[x]] = r[x];
}
if(r[x] != -1){
l[r[x]] = l[x];
}
del.push_back(x);
}
else{
s.insert(abs(v[x]));
}
x = r[x];
}
x = head;
while(x != -1){//遍历删除了若干元素的链表
if(r[x] == -1){
printf("%05d %d -1\n", x, v[x]);
}
else printf("%05d %d %05d\n", x, v[x], r[x]);
x = r[x];
}
for(int i = 0; i < del.size(); i++){//遍历被删除的元素
printf("%05d %d ", del[i], v[del[i]]);
if(i == del.size() - 1) printf("-1\n");
else printf("%05d\n", del[i + 1]);
}
}
int main() {
int t = 1;
// std::cin >> t;
while(t--) solve();
return 0;
}