PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作
给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值K,仅保留第一个出现的节点。删除的节点会保留在另一条链表上。简单来说就是去重,去掉绝对值相同的那些。先输出删除后的链表,再输出删除了的链表。
建立结构体节点,包括起始地址addr,下一个地址to,值value。链表数组索引为地址,接下来就是模拟链表的操作了,并且建立一个flag数组标记对应值K是否出现,若出现则flag[k]=addr,未出现则为-1,注意这里不能为0因为地址值存在为0的情况。最后的输出地址前面要补0,如果是链尾的话,-1则不需要补0。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std; const int maxn=+;
struct Node{
int addr;
int value;
int to;
}node[maxn];
int flag[maxn];
int linkedlist[maxn]; //去重后的链表
int removelist[maxn]; //删除节点组成的链表 int main()
{
int head,n;
int a,b,c;
for(int i=;i<maxn;i++)
flag[i]=-;
///memset(flag,0,sizeof(flag)); 地址中存在为0的情况,所以不能用0表示还没出现啊啊
scanf("%d %d",&head,&n);
for(int i=;i<n;i++){
scanf("%d %d %d",&a,&b,&c);
node[a].addr=a;
node[a].value=b;
node[a].to=c;
}
int tmp;
int cnt1=,cnt2=;
int lastaddr=-; //存储目前linkedlist链表的最后一个节点
do{
tmp=abs(node[head].value);
if(flag[tmp]==-){
linkedlist[cnt1++]=node[head].addr;
flag[tmp]=node[head].addr;
lastaddr=head;
}
else{
removelist[cnt2++]=node[head].addr;
node[lastaddr].to=node[head].to;
}
head=node[head].to;
}while(head!=-); int id;
//更新removelist中节点的to
for(int i=;i<cnt2-;i++){
id=removelist[i];
node[id].to=node[removelist[i+]].addr;
}
node[removelist[cnt2-]].to=-;
node[linkedlist[cnt1-]].to=-;
for(int i=;i<cnt1-;i++){
id=linkedlist[i];
printf("%05d %d %05d\n",node[id].addr,node[id].value,node[id].to);
}
//注意最后因为地址是-1,所以得另外输出
if(cnt1>=){
id=linkedlist[cnt1-];
printf("%05d %d %d\n",node[id].addr,node[id].value,node[id].to);
}
for(int i=;i<cnt2-;i++){
id=removelist[i];
printf("%05d %d %05d\n",node[id].addr,node[id].value,node[id].to);
}
if(cnt2>=){
id=removelist[cnt2-];
printf("%05d %d %d\n",node[id].addr,node[id].value,node[id].to);
}
return ;
}
PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作的更多相关文章
- 【PAT甲级】1097 Deduplication on a Linked List (25 分)
题意: 输入一个地址和一个正整数N(<=100000),接着输入N行每行包括一个五位数的地址和一个结点的值以及下一个结点的地址.输出除去具有相同绝对值的结点的链表以及被除去的链表(由被除去的结点 ...
- PAT Advanced 1097 Deduplication on a Linked List (25) [链表]
题目 Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplica ...
- PAT (Advanced Level) 1097. Deduplication on a Linked List (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT (Advanced Level) Practise - 1097. Deduplication on a Linked List (25)
http://www.patest.cn/contests/pat-a-practise/1097 Given a singly linked list L with integer keys, yo ...
- 1097. Deduplication on a Linked List (25)
Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...
- PAT甲级题解(慢慢刷中)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲级——1097 Deduplication on a Linked List (链表)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/91157982 1097 Deduplication on a L ...
- pat甲级题解(更新到1013)
1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...
- pat1097. Deduplication on a Linked List (25)
1097. Deduplication on a Linked List (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...
随机推荐
- Servlet 核心接口
在Servlet体系结构中,除了用于实现Servlet的Servlet接口.GenericServlet类和HttpServlet类外,还有一些辅助Servlet获取相关资源信息的重要接口,了解这些接 ...
- 一篇关于介绍php的几个user 认证相关的几个包
http://kodeinfo.com/post/laravel-authentication-packages LARAVEL AUTHENTICATION PACKAGES By Imran Iq ...
- Fedora 中多显示器环境下的工作区切换
[Dual monitor workspaces] 默认情况下,fedora中 Gnome 桌面环境在切换工作去的时候,只会在 Primary display 上切换, 其他显示器保持不变.如果要实现 ...
- linux结束程序内存不会马上释放的解决方法
Linux下频繁读写文件时,内存资源被耗尽,当程序结束后,内存不会释放需要清除缓存.Linux缓存有dentry,buffer cache,page cache. 注:Dentry用来加速文件路径 ...
- IE8 input X 去掉文本框的叉叉和密码输入框的眼睛图标
从IE 10开始,type="text" 的 input 在用户输入内容后,会自动产生一个小叉叉(X),方便用户点击清除已经输入的文本 对于type="password& ...
- MYSQL一次千万级连表查询优化(一)
摘自网上学习之用 https://blog.csdn.net/Tim_phper/article/details/78344444 概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的 ...
- java通过反射调用有参数的方法
public static void eachCfg(Class Initclass,String taskType){ Field[] fields = Initclass.getDeclaredF ...
- Java之Https请求
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
- jqgrid 单列排序和组合排序
有时,我们需要设置jqgrid表格按某个列排序,或则按多个列组合排序.如何实现? 1)设置可以排序的列 sortable: true 2)设置 multiSort: true 启用组合排序 $(&q ...