1097 Deduplication on a Linked List (25point(s)) Easy only once *静态链表遍历问题

基本思想:

注意遍历方式;

关键点:

注意一下节点的前后地址输出问题;

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector> 
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<set>
#include<stack>
using namespace std;

int n,st;

struct node {
    int stp;
    int etp;
    int data;
};

const int maxn = 100000;

node vec[maxn];
set<int>sset;
vector<node>ol;
vector<node>tl;

int main() {
    cin >> st >> n;
    int s, e, data;
    for (int i = 0; i < n; i++) {
        cin >> s >> data >> e;
        vec[s].stp = s;
        vec[s].etp = e;
        vec[s].data = data;
    }
    //int la=st;
    while (st != -1) {
        if (sset.find(abs(vec[st].data)) != sset.end()) {
            //如果找到;
            tl.push_back(vec[st]);
            st = vec[st].etp;
        }
        else {
            sset.insert(abs(vec[st].data));
            ol.push_back(vec[st]);
            st = vec[st].etp;
        }
    }

    //st = ol[0].stp;

    for (int i = 0; i < ol.size(); i++) {
        if (i != ol.size() - 1) {
            printf("%05d %d %05d\n", ol[i].stp, ol[i].data, ol[i+1].stp);
        //    st = ol[i+1].stp;
        }
        else {
            printf("%05d %d -1\n", ol[i].stp, ol[i].data);
        }
    }

    if (tl.size() == 0) {
        return 0;
    }
    //st = tl[0].stp;
    for (int i = 0; i < tl.size(); i++) {
        if (i != tl.size() - 1) {
            printf("%05d %d %05d\n",tl[i].stp, tl[i].data, tl[i+1].stp);
            //st = tl[i+1].stp;
        }
        else {
            printf("%05d %d -1\n", tl[i].stp, tl[i].data);
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12346148.html