中山做百度网站的公司名称,如何做一个个人做网站,网站开发流程步骤,沧州做网站优化给定一个带整数键值的链表 L#xff0c;你需要把其中绝对值重复的键值结点删掉。即对每个键值 K#xff0c;只有第一个绝对值等于 K 的结点被保留。同时#xff0c;所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15#xff0c;你需要输出去重后…给定一个带整数键值的链表 L你需要把其中绝对值重复的键值结点删掉。即对每个键值 K只有第一个绝对值等于 K 的结点被保留。同时所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15你需要输出去重后的链表 21→-15→-7还有被删除的链表 -15→15。
输入格式
输入在第一行给出 L 的第一个结点的地址和一个正整数 N≤105为结点总数。一个结点的地址是非负的 5 位整数空地址 NULL 用 -1 来表示。
随后 N 行每行按以下格式描述一个结点
地址 键值 下一个结点其中地址是该结点的地址键值是绝对值不超过104的整数下一个结点是下个结点的地址。
输出格式
首先输出去重后的链表然后输出被删除的链表。每个结点占一行按输入的格式输出。
输入样例
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854输出样例
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1
代码
#include iostream
#include unordered_mapusing namespace std;const int N 1e5 10;unordered_mapint, int dedup_hash;
unordered_mapstring, inth;
string head;
int n;
struct node {string head, end;int num;
}nodes[N], dedup[N], del[N];int main() {cin head n;for (int i 0; i n; i ) {cin nodes[i].head nodes[i].num nodes[i].end;h[nodes[i].head] i;}string l head, r -1;int l_cnt 0, r_cnt 0;int root h[head];while(1) {if (!dedup_hash[abs(nodes[root].num)]) {dedup_hash[abs(nodes[root].num)] 1;if (l_cnt ! 0) dedup[l_cnt - 1].end nodes[root].head;dedup[l_cnt].head nodes[root].head;dedup[l_cnt].num nodes[root].num;// dedup[l_cnt].end -1;l_cnt ;}else {if (r_cnt ! 0) del[r_cnt - 1].end nodes[root].head;del[r_cnt].head nodes[root].head;del[r_cnt].num nodes[root].num;r_cnt ;}if (nodes[root].end -1) break;root h[nodes[root].end];}for (int i 0; i l_cnt; i ) {if (i l_cnt - 1) cout dedup[i].head dedup[i].num -1 endl;else cout dedup[i].head dedup[i].num dedup[i].end endl;}for (int i 0; i r_cnt; i ) {if (i r_cnt - 1) cout del[i].head del[i].num -1 endl;else cout del[i].head del[i].num del[i].end endl;}
}