當(dāng)前位置:
首頁 >
L2-002 链表去重-团体程序设计天梯赛GPLT
發(fā)布時間:2025/3/20
41
豆豆
生活随笔
收集整理的這篇文章主要介紹了
L2-002 链表去重-团体程序设计天梯赛GPLT
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目來源:團(tuán)體程序設(shè)計天梯賽-練習(xí)集
題目地址:L2-002 鏈表去重
題目大意
將鏈表數(shù)據(jù)域的值相同(包含絕對值相同)的節(jié)點去掉,然后將去掉的節(jié)點又重新組成一條鏈表,最后輸出去重后的鏈表和被去掉的節(jié)點組成的鏈表。樣例表示如下:
題目分析
這道題的題目難度相對較低,只要你熟悉鏈表的遍歷和刪除操作,就可以順利完成這道題。雖然話是那么說,但是用對了數(shù)據(jù)結(jié)構(gòu)可以讓解題事半功倍。
- 設(shè) lblblb 數(shù)組用于存儲輸入的鏈表,我們可以用數(shù)組下標(biāo)表示當(dāng)前節(jié)點地址,就可以避免遍歷時尋址的麻煩
- 設(shè) rerere 數(shù)組用于存儲被去除節(jié)點組成的鏈表,這時我們可以直接順序存儲被去除的節(jié)點,而且只需要存儲節(jié)點的地址和數(shù)據(jù)域,這樣我們就可以利用順序知道每個下個節(jié)點的地址了。
- 事實上,我們可以發(fā)現(xiàn) lblblb 相當(dāng)于鏈表,而 rerere 相當(dāng)于順序表。它們的存儲示意圖如下:
了解到上面這些,寫代碼已經(jīng)順利了(默認(rèn)你會鏈表的遍歷和刪除),最后再說一下寫題目踩到的坑:
- 地址直接用 intintint 類型存儲,沒必要用 stringstringstring,否則無法用上上述存儲結(jié)構(gòu)(別跟我說用 mapmapmap ,我第一發(fā)就是這樣超時的)。
- 格式控制符 “%05d” 表示如果輸出的字符少于5位時,在左邊補(bǔ) 000 (默認(rèn)是補(bǔ)空格)。
- 刪除操作需要用到前驅(qū)節(jié)點 preprepre 的指針 ,preprepre 在每次遇到不需要刪除的節(jié)點時就要更新,如果單純的直接用上一個節(jié)點,就可能用到被去除節(jié)點的地址。
代碼如下
#include <bits/stdc++.h>using namespace std; const int maxn = 1e5 + 10; int n, cnt; int one, s, pre; /*** lb用于存儲原始鏈表* re用于存儲原始鏈表中的重復(fù)節(jié)點*/ pair<int, int> lb[maxn]; pair<int, int> re[maxn]; set<int> vis;int main() {cin >> one >> n;for (int i = 1; i <= n; i++) {int address, num, next;cin >> address >> num >> next;lb[address] = make_pair(num, next);}cnt = 0;//遍歷鏈表,s表示當(dāng)前節(jié)點的地址for (s = one; s != -1; s = lb[s].second) {int num = lb[s].first;if (!vis.count(abs(num))) {vis.insert(abs(num));//pre記錄下一個節(jié)點的前驅(qū)節(jié)點地址pre = s;} else {//鏈表刪除重復(fù)節(jié)點操作lb[pre].second = lb[s].second;//將刪除的節(jié)點存到另一條鏈表re[cnt].first = num;re[cnt].second = s;cnt++;}}for (s = one; s != -1; s = lb[s].second) {printf("%05d %d ", s, lb[s].first);if (lb[s].second != -1) printf("%05d\n", lb[s].second);else printf("-1\n");}for (int i = 0; i < cnt; i++) {printf("%05d %d ", re[i].second ,re[i].first);if (i != cnt - 1) printf("%05d\n", re[i + 1].second);else printf("-1\n");}return 0; }如果本文對你有所幫助,別忘了點贊哦~
總結(jié)
以上是生活随笔為你收集整理的L2-002 链表去重-团体程序设计天梯赛GPLT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L2-001 紧急救援-团体程序设计天梯
- 下一篇: L2-003 月饼-团体程序设计天梯赛G