PAT甲级1097 Deduplication on a Linked List:[C++题解]遍历链表、两个vector
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1097 Deduplication on a Linked List:[C++题解]遍历链表、两个vector
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
題意:刪掉鏈表中數(shù)值絕對值相同的結(jié)點(diǎn),將其放入另一個(gè)鏈表中。最后輸出去重后的鏈表和刪掉元素構(gòu)成的鏈表。
分析:采用數(shù)組模擬鏈表,把鏈表存下來。然后遍歷鏈表,該元素的絕對值第一次出現(xiàn)就放入數(shù)組a,如果之前出現(xiàn)過就放入數(shù)組b。分別輸出兩個(gè)數(shù)組即可。
ac代碼
#include<bits/stdc++.h> using namespace std;const int N =1e5+10;int h,n; int e[N],ne[N]; bool st[N]; //出現(xiàn)過置為true,該結(jié)點(diǎn)放入數(shù)組b中int main(){cin>>h>>n;int cnt =0;for(int i=0;i<n;i++){int address,data, next;cin>>address>>data>>next;e[address] =data, ne[address] =next;}vector<int> a,b;//兩個(gè)數(shù)組,存放結(jié)點(diǎn)地址//遍歷鏈表for(int i=h;i!=-1;i=ne[i] ){int v =abs(e[i]);//出現(xiàn)過,放入數(shù)組bif(st[v]) b.push_back(i);else{st[v] =true;a.push_back(i); //存結(jié)點(diǎn)的地址}}for(int i=0;i<a.size();i++){printf("%05d %d ",a[i],e[a[i]]);if(i+1 == a.size()) puts("-1");else printf("%05d\n",a[i+1]);}for(int i=0;i<b.size();i++){printf("%05d %d ",b[i],e[b[i]]);if(i+1 == b.size()) puts("-1");else printf("%05d\n",b[i+1]);} }題目鏈接
PAT甲級1097 Deduplication on a Linked List
總結(jié)
以上是生活随笔為你收集整理的PAT甲级1097 Deduplication on a Linked List:[C++题解]遍历链表、两个vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1074 Reversing
- 下一篇: PAT甲级1133 Splitting