PAT 1097 Deduplication on a Linked List

個人學習記錄,代碼難免不盡人意
Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated absolute values of the keys. That is, for each value K, only the first node of which the value or absolute value of its key equals K will be kept. At the mean time, all the removed nodes must be kept in a separate list. For example, given L being 21→-15→-15→-7→15, you must output 21→-15→-7, and the removed list -15→15.

Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, and a positive N (≤10 5 ) which is the total number of nodes. The address of a node is a 5-digit nonnegative integer, and NULL is represented by ?1.

Then N lines follow, each describes a node in the format:

Address Key Next
where Address is the position of the node, Key is an integer of which absolute value is no more than 10 4, and Next is the position of the next node.

Output Specification:
For each case, output the resulting linked list first, then the removed list. Each node occupies a line, and is printed in the same format as in the input.

Sample Input:
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
Sample Output:
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1

#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
#include<set>
using namespace std;
struct node{int data;int address;int next; 
}Node[100010];int main(){int first,n,k;scanf("%d %d",&first,&n);for(int i=0;i<n;i++){int address,data,next;scanf("%d%d%d",&address,&data,&next);node a;a.address=address;a.data=data;a.next=next;Node[address]=a;}set<int> s;s.insert(abs(Node[first].data));int now=Node[first].address;int newfirst=-1;int newtemp=-1;bool flag=true;while(Node[now].next!=-1){node no=Node[now];if(s.find(abs(Node[no.next].data))==s.end()){s.insert(abs(Node[no.next].data));now=no.next;}else{Node[now].next=Node[no.next].next;if(flag){newfirst=no.next;newtemp=newfirst;flag=false;}else{Node[newtemp].next=no.next;newtemp=no.next;}}}now=Node[first].address;while(now!=-1){if(Node[now].next==-1)printf("%05d %d -1\n",Node[now].address,Node[now].data);else printf("%05d %d %05d\n",Node[now].address,Node[now].data,Node[now].next);now=Node[now].next;}if(newfirst!=-1){Node[newtemp].next=-1;int newnow=Node[newfirst].address;while(newnow!=-1){if(Node[newnow].next==-1)printf("%05d %d -1\n",Node[newnow].address,Node[newnow].data);else printf("%05d %d %05d\n",Node[newnow].address,Node[newnow].data,Node[newnow].next);newnow=Node[newnow].next;}}}

本題真的踩了不少坑,我的做法和《算法筆記》略有不同,其中要注意的地方有1.注意邊界,比如當前node的next值為-1,再讓node=node.next就很有可能出錯,應該事先判斷。一定要注意邊界值。并且,我的做法還要判斷是不是有要刪除的節點(即原鏈表中是否出現了兩個絕對值一樣的數),如果沒有的話有些操作不應該出現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37523.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37523.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37523.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實例038 設置窗體在屏幕中的位置

實例說明 在窗體中可以設置窗體居中顯示&#xff0c;本例通過設置窗體的Left屬性和Top屬性可以準確設置窗體的位置。運行本例&#xff0c;效果如圖1.38所示。 技術要點 設置窗體在屏幕中的位置&#xff0c;可以通過設置窗體的屬性來實現。窗體的Left屬性表示窗體距屏幕左側的…

angular 子組件ngOnChanges監聽@input傳入的輸入屬性

在進入主題之前&#xff0c;先了解一下angular的生命周期。 生命周期 鉤子分類 指令與組件共有的鉤子 ngOnChangesngOnInitngDoCheckngOnDestroy 組件特有的鉤子 ngAfterContentInitngAfterContentCheckedngAfterViewInitngAfterViewChecked 生命周期鉤子的作用及調用順序 …

Makefile多個子文件夾

首先&#xff0c;目錄結構&#xff1a; 其中根目錄Makefile主要作用是調用其他子文件夾Makefile&#xff0c;每個子模塊執行各自編譯后在build文件夾下生成obj文件&#xff0c;最后再執行build文件夾下Makefile進行鏈接。 根目錄Makefile&#xff1a; TARGET ACT_Drv ##SRC_D…

秦嶺地形圖、水系圖、全景圖

來源&#xff1a;頭條留白sy&#xff0c;星球研究所等&#xff0c;轉自&#xff1a;地理科學研究苑

kubernetes集群(k8s)之安裝部署Calico 網絡

目錄 安裝部署Calico 網絡 &#xff08;一&#xff09;環境準備 &#xff08;二&#xff09;部署docker環境 &#xff08;三&#xff09;部署kubernetes集群 &#xff08;四&#xff09;部署Calico網絡插件 安裝部署Calico 網絡 &#xff08;一&#xff09;環境準備 IP地…

【歷史上的今天】8 月 15 日:蘋果推出初代 iMac;谷歌收購摩托羅拉移動;Fuchsia 首次發布

整理 | 王啟隆 透過「歷史上的今天」&#xff0c;從過去看未來&#xff0c;從現在亦可以改變未來。 今天是 2023 年 8 月 15 日&#xff0c;在 1878 年的今天&#xff0c;我國第一套郵票發行。中國是一個文明古國&#xff0c;在郵政通信方面&#xff0c;有著悠久的歷史。早在三…

【Qt】多線程

線程創建 自定義線程類 #ifndef CUSTOMETHREAD_H #define CUSTOMETHREAD_H#include <QObject> #include <QThread> #include "add.h"class CustomeThread : public QThread {Q_OBJECT public:// Bind the thread kernel function.explicit CustomeThre…

分布式監控平臺—zabbix

前言一、zabbix概述1.1 什么是zabbix1.2 zabbix的監控原理1.3 zabbix常見五個應用程序1.4 zabbix的監控模式1.5 監控架構1.5.1 C/S&#xff08;server—client&#xff09;1.5.2 server—proxy—client1.5.3 master—node—client 二、部署zabbix2.1 部署 zabbix server 端2.2 …

“華為杯”研究生數學建模競賽2018年-【華為杯】C題:對恐怖主義襲擊事件數據的量化分析(續篇)

目錄 5.3.3 邏輯回歸預測模型確立 5.3.4 利用邏輯回歸預測模型進行求解 5.4 模型評價

日常BUG——SpringBoot關于父子工程依賴問題

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 在父子工程A和B中。A依賴于B&#xff0c;但是A中卻無法引入B中的依賴&#xff0c;具體出現的…

Kubernetes 部署DolphinScheduler 創建租戶失敗

創建租戶 報錯創建租戶失敗。后臺日志如下 源代碼跟蹤 org.apache.dolphinscheduler.api.service.impl.TenantServiceImpl / if hdfs startup if (PropertyUtils.getResUploadStartupState()) {createTenantDirIfNotExists(tenantCode); }需要將 resource.storage.type 置為…

Java反射獲取所有Controller和RestController類的方法

Java反射獲取所有Controller和RestController類的方法 引入三方反射工具Reflections <dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.10.2</version> </dependency>利用反…

【數據結構】隊列及其實現

目錄 1.隊列的概念及結構 2.隊列的實現 2.1隊列結構定義 2.2隊列的初始化及銷毀 2.3數據入隊 2.4數據出隊 2.5訪問隊頭數據 2.6訪問隊尾數據 2.6判斷隊列是否為空 2.7求隊列的大小 2.7打印隊列 1.隊列的概念及結構 隊列&#xff1a;只允許在一端進行插入數據操作&…

ECMAScript 2023(ES14)中的所有新功能

?JavaScript在持續發展&#xff0c;近期ECMAScript 14中發布添加了一批新功能&#xff0c;讓我們一起來探索一下今年對JavaScript開發人員的新功能。時間的車輪又過去了一年&#xff0c;隨之而來的是JavaScript的新官方版本&#xff1a;ECMAScript 2023&#xff0c;也被稱為EC…

與微服務平臺廠家聯手,一起實現高效率發展!

在如今的快節奏發展社會中&#xff0c;只有利用科技的力量&#xff0c;才能與市場接軌&#xff0c;了解市場和客戶需求&#xff0c;最終實現更快速的發展。如果還停留在閉門造車的環境中&#xff0c;不“引進來&#xff0c;走出去”&#xff0c;那勢必會與成功擦肩而過。微服務…

clickHouse部署

docker倉庫地址 https://hub.docker.com/ 1、docker環境搭建 # 1.先安裝yml yum install -y yum-utils device-mapper-persistent-data lvm2 # 2.設置阿里云鏡像 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3.查…

【芯片前端】auto_testbench的大版本升級——加入簡單預期與自動比對

前言 前文提要&#xff1a; 【芯片前端】一鍵生成簡易版本定向RTL驗證環境的腳本——auto_verification_rtl腳本_尼德蘭的喵的博客-CSDN博客 【芯片前端】可能是定向驗證的巔峰之作——auto_testbench_autotestbench_尼德蘭的喵的博客-CSDN博客 工具路徑&#xff1a; auto…

廣告聚合平臺能為APP開發者提供哪些幫助

應用變現平臺是幫助開發者優化廣告策略并最終獲得更多收入的綜合途徑。在廣告變現過程中&#xff0c;接入單一的廣告聯盟&#xff0c;變現效率不高&#xff0c;并且開發者需要花費許多精力進行篩選和管理&#xff0c;難免會應接不暇&#xff0c;而聚合廣告平臺的出現則一定程度…

GloVe、子詞嵌入、BPE字節對編碼、BERT相關知識(第十四次組會)

GloVe、子詞嵌入、BPE字節對編碼、BERT相關知識(第十四次組會) Glove子詞嵌入上游、下游任務監督學習、無監督學習BERTGlove 子詞嵌入 上游、下游任務 監督學習、無監督學習 BERT

springboot使用configtree讀取樹形文件目錄中的配置

文章目錄 一、介紹二、演示環境三、項目演示1. 配置文件2. 導入配置3. 檢測配置屬性 四、應用場景五、源碼解析1. ConfigTreeConfigDataLocationResolver2. ConfigTreeConfigDataLoader 六、總結 一、介紹 相信絕大多數使用springboot開發項目的朋友們在添加配置時&#xff0c…