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 作者 ...
随机推荐
- win7 win10双系统开机系统引导
以win7启动管理器引导作为启动引导 安装一个easybcd 然后里面添加引导选项(添加新条目---->编辑引导菜单(选择倒计时30秒)把use metro bootloader勾去掉就是默认的 ...
- sql注入--mysql
mysql数据库结构: 数据库A --> 表名 --> 列名 --> 数据 数据库B --> 表名 --> 列名 --> 数据 mysql数据库信息: my ...
- [ML学习笔记] 决策树与随机森林(Decision Tree&Random Forest)
[ML学习笔记] 决策树与随机森林(Decision Tree&Random Forest) 决策树 决策树算法以树状结构表示数据分类的结果.每个决策点实现一个具有离散输出的测试函数,记为分支 ...
- redis 持久化与备份策略
持久化(persistence) 本文是 Redis 持久化文档 的中文翻译. 这篇文章提供了 Redis 持久化的技术性描述,推荐所有 Redis 用户阅读. 要更广泛地了解 Redis 持久化,以 ...
- JSONP跨域和CORS跨域
什么是跨域? 跨域:指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器的安全限制! 同源策略 同源策略:域名.协议.端口均相同. 浏览器执行JavaScript脚本时,会检查这 ...
- Python返回数组(List)长度的方法
其实很简单,用len函数: >>> array = [0,1,2,3,4,5]>>> print len(array) 同样,要获取一字符串的长度,也是用这个len ...
- 函数式编程编程即高阶函数+monad
高阶函数负责数据的单次映射: monad负责数据处理流的串联,并使得串联函数具有相同的形式. 同时moand负责基础类型和高阶类型间的转换.
- 如何为已有的类没有生成toString的方法增强生成toString方法
1:只要提到增强,我的第一思路就是代理,动态代理.但是仅仅是一个toString其实没必要使用代理模式了,有点大材小用了(动态代理其实也是最后通过反射生成toString的方法). 2:简单粗暴,可以 ...
- 使用docker-compose快速构建wordpress
前提必须是在docker的环境下,关于docker的安装可以参考(考虑目前国内使用ubuntu和centos的比较多,所以就列出这两个): Ubuntu16.04安装docker centos7之do ...
- tsconfig.json
概述 如果一个目录下存在一个tsconfig.json文件,那么它意味着这个目录是TypeScript项目的根目录. tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项. 一个项 ...