链表去重求调!
  • 板块题目总版
  • 楼主temp142857
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/12 22:37
  • 上次更新2024/3/13 13:39:05
查看原帖
链表去重求调!
983802
temp142857楼主2024/3/12 22:37

题目链接如下: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;
}
2024/3/12 22:37
加载中...