日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

L2-002 链表去重-团体程序设计天梯赛GPLT

發(fā)布時(shí)間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 L2-002 链表去重-团体程序设计天梯赛GPLT 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目來源:團(tuán)體程序設(shè)計(jì)天梯賽-練習(xí)集
題目地址:L2-002 鏈表去重

題目大意

將鏈表數(shù)據(jù)域的值相同(包含絕對(duì)值相同)的節(jié)點(diǎn)去掉,然后將去掉的節(jié)點(diǎn)又重新組成一條鏈表,最后輸出去重后的鏈表和被去掉的節(jié)點(diǎn)組成的鏈表。樣例表示如下:

題目分析

這道題的題目難度相對(duì)較低,只要你熟悉鏈表的遍歷和刪除操作,就可以順利完成這道題。雖然話是那么說,但是用對(duì)了數(shù)據(jù)結(jié)構(gòu)可以讓解題事半功倍。

  • 設(shè) lblblb 數(shù)組用于存儲(chǔ)輸入的鏈表,我們可以用數(shù)組下標(biāo)表示當(dāng)前節(jié)點(diǎn)地址,就可以避免遍歷時(shí)尋址的麻煩
  • 設(shè) rerere 數(shù)組用于存儲(chǔ)被去除節(jié)點(diǎn)組成的鏈表,這時(shí)我們可以直接順序存儲(chǔ)被去除的節(jié)點(diǎn),而且只需要存儲(chǔ)節(jié)點(diǎn)的地址和數(shù)據(jù)域,這樣我們就可以利用順序知道每個(gè)下個(gè)節(jié)點(diǎn)的地址了。
  • 事實(shí)上,我們可以發(fā)現(xiàn) lblblb 相當(dāng)于鏈表,而 rerere 相當(dāng)于順序表。它們的存儲(chǔ)示意圖如下:

了解到上面這些,寫代碼已經(jīng)順利了(默認(rèn)你會(huì)鏈表的遍歷和刪除),最后再說一下寫題目踩到的坑:

  • 地址直接用 intintint 類型存儲(chǔ),沒必要用 stringstringstring,否則無法用上上述存儲(chǔ)結(jié)構(gòu)(別跟我說用 mapmapmap ,我第一發(fā)就是這樣超時(shí)的)。
  • 格式控制符 “%05d” 表示如果輸出的字符少于5位時(shí),在左邊補(bǔ) 000 (默認(rèn)是補(bǔ)空格)。
  • 刪除操作需要用到前驅(qū)節(jié)點(diǎn) preprepre 的指針 ,preprepre 在每次遇到不需要?jiǎng)h除的節(jié)點(diǎn)時(shí)就要更新,如果單純的直接用上一個(gè)節(jié)點(diǎn),就可能用到被去除節(jié)點(diǎn)的地址。

代碼如下

#include <bits/stdc++.h>using namespace std; const int maxn = 1e5 + 10; int n, cnt; int one, s, pre; /*** lb用于存儲(chǔ)原始鏈表* re用于存儲(chǔ)原始鏈表中的重復(fù)節(jié)點(diǎn)*/ 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é)點(diǎn)的地址for (s = one; s != -1; s = lb[s].second) {int num = lb[s].first;if (!vis.count(abs(num))) {vis.insert(abs(num));//pre記錄下一個(gè)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)地址pre = s;} else {//鏈表刪除重復(fù)節(jié)點(diǎn)操作lb[pre].second = lb[s].second;//將刪除的節(jié)點(diǎn)存到另一條鏈表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; }

如果本文對(duì)你有所幫助,別忘了點(diǎn)贊哦~

總結(jié)

以上是生活随笔為你收集整理的L2-002 链表去重-团体程序设计天梯赛GPLT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。