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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【PAT甲级 链表去重】1097 Deduplication on a Linked List (25 分) C++ 全部AC

發布時間:2024/2/28 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【PAT甲级 链表去重】1097 Deduplication on a Linked List (25 分) C++ 全部AC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

思路:

  • 先把題目中的鏈表讀進內存
  • 創建兩個新鏈表listA, listB
  • 遍歷原鏈表,把重復的放進listB,不重復的放進listA。放的時候,注意處理一下后繼next中存的值。
  • 分別打印兩個分離的鏈表listA,listB,注意補全5位address的前導0


題解 C++

每次提交結果不完全一樣,有時候后兩個測試點運行超時,有時候全部AC。
實際比賽的時候,也要多試幾次(上次就是,提交多次,結果有微小差別)。

#include<iostream> #include<math.h> #include<iomanip> #define SIZE 10000 using namespace std; class Node { public:int addr = -1;int key; //0-10000int next = -1;bool isSame = false; //標記key是否重復 }; int main() {Node list[SIZE]; //0-100000 數組存儲鏈表 下標代表地址int firstNotSame, total;cin >> firstNotSame >> total;//輸入鏈表int addr;for (int i = 0; i < total; i++) {cin >> addr;list[addr].addr = addr;//便于輸出cin >> list[addr].key >> list[addr].next;}//遍歷鏈表:拆分Node listA[SIZE];int sizeA = 0;Node listB[SIZE];int sizeB = 0;bool hasKey[10000] = { false };//標記該key是否存在Node cur = list[firstNotSame];while (true) {if (!hasKey[abs(cur.key)]) {//key不存在hasKey[abs(cur.key)] = true;//存入Aif (sizeA != 0) {listA[sizeA - 1].next = cur.addr;}listA[sizeA] = cur;listA[sizeA].next = -1;sizeA++;}else {//存入Bif (sizeB != 0) {listB[sizeB - 1].next = cur.addr;}listB[sizeB] = cur;listB[sizeB].next = -1;sizeB++;}if (cur.next == -1) {break;}else {cur = list[cur.next];}}//輸出兩個(偽)鏈表for (int i = 0; i < sizeA; i++) {cout << setw(5) << setfill('0') << listA[i].addr << " ";//處理前導0cout << listA[i].key << " ";if (listA[i].next == -1)cout << "-1\n"; //處理前導0else cout << setw(5) << setfill('0') << listA[i].next << endl;}for (int i = 0; i < sizeB; i++) {cout << setw(5) << setfill('0') << listB[i].addr << " ";//處理前導0cout << listB[i].key << " ";if (listB[i].next == -1)cout << "-1\n"; //處理前導0else cout << setw(5) << setfill('0') << listB[i].next << endl;}system("pause"); }

總結

以上是生活随笔為你收集整理的【PAT甲级 链表去重】1097 Deduplication on a Linked List (25 分) C++ 全部AC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。