1097. Deduplication on a Linked List (25)

来源:互联网 发布:程序员用的文本编辑器 编辑:程序博客网 时间:2024/06/04 23:08

    先走一遍,找出所有有效的链表节点,然后按要求将节点分成两组,然后输出

#include <iostream>#include <cstdio>#include <vector>#include <unordered_set>#include <cmath>using namespace std;struct Node{int add, key, next;Node(){}Node(int a, int k, int n) : add(a), key(k), next(n){}};vector<Node> nodes(100005);int main(){int head, n;scanf("%d%d", &head, &n);for(int i = 0; i < n; ++i){int add, key, next;scanf("%d%d%d", &add, &key, &next);nodes[add] = Node(add, key, next);}vector<Node> vec;while(head != -1){vec.push_back(nodes[head]);head = nodes[head].next;}unordered_set<int> table;vector<Node> out1, out2;for(auto& v : vec){if(table.find(abs(v.key)) != table.end()){out2.push_back(v);}else{out1.push_back(v);table.insert(abs(v.key));}}for(size_t i = 0; i < out1.size(); ++i){if(i+1 == out1.size()){printf("%05d %d -1\n", out1[i].add, out1[i].key);}else{printf("%05d %d %05d\n", out1[i].add, out1[i].key, out1[i+1].add);}}for(size_t i = 0; i < out2.size(); ++i){if(i+1 == out2.size()){printf("%05d %d -1\n", out2[i].add, out2[i].key);}else{printf("%05d %d %05d\n", out2[i].add, out2[i].key, out2[i+1].add);}}return 0;}


0 0
原创粉丝点击