给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值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)-链表的删除操作的更多相关文章

  1. 【PAT甲级】1097 Deduplication on a Linked List (25 分)

    题意: 输入一个地址和一个正整数N(<=100000),接着输入N行每行包括一个五位数的地址和一个结点的值以及下一个结点的地址.输出除去具有相同绝对值的结点的链表以及被除去的链表(由被除去的结点 ...

  2. 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 ...

  3. PAT (Advanced Level) 1097. Deduplication on a Linked List (25)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  4. 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 ...

  5. 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 ...

  6. PAT甲级题解(慢慢刷中)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. PAT甲级——1097 Deduplication on a Linked List (链表)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/91157982 1097 Deduplication on a L ...

  8. pat甲级题解(更新到1013)

    1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...

  9. pat1097. Deduplication on a Linked List (25)

    1097. Deduplication on a Linked List (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...

随机推荐

  1. kubeadm快速部署Kubernetes单节点

    1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬 ...

  2. October 16th 2017 Week 42nd Monday

    The more decisions that you are forced to make alone, the more you are aware of your freedom to choo ...

  3. Java多线程学习笔记之一线程基础

    1.进程与线程 1.1 进程:是正在运行中的程序的实例,一个运行中idea就是一个进程.进程有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和 ...

  4. C#中抽象类(abstract)和接口(interface)的实现

    抽象类 抽象方法是没有代码实现的方法,使用abstract关键字修饰: 抽象类是包含0到多个抽象方法的类,其不能实例化.含有抽象方法的类必须是抽象类,抽象类中也可以包含非抽象方法: 重写抽象类的方法用 ...

  5. 基于Map的简易记忆化缓存

    背景 在应用程序中,时常会碰到需要维护一个map,从中读取一些数据避免重复计算,如果还没有值则计算一下塞到map里的的小需求(没错,其实就是简易的缓存或者说实现记忆化).在公司项目里看到过有些代码中写 ...

  6. 借助强大的IDEA开发ide高效实现equals,hashcode以及toString方法

    IDEA工具提供多种生成hashCode与equals的代码方案,注意:尽量不要使用第一个方案,第一个方案对于null不做判空处理,容易NNP问题. 对于生成toString方法方案,默认使用的是+拼 ...

  7. linux下apache中httpd.conf的ServerAdmin 是设置的什么?

    <VirtualHost 127.0.0.1:80> ServerAdmin ******@****.com DocumentRoot /home/aaa/sss ServerName s ...

  8. Redis数据库的安装与基本应用

    一:了解NoSQL 1:介绍:Nosql的全称是Not Only Sql,这个概念早起就有人提出,在09年的时候比较火.Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的my ...

  9. cleanCode[1]:有意义的命名

    为什么要有意义的命名: 我们都曾经说过有朝一日再回头清理那些糟糕的代码,然而最终总是弃之不顾.稍后等于永不,我们需要立即行动,写优雅的代码. 写代码的过程中,读占的比例很大,所以首先要让代码易读. 有 ...

  10. 20155305《网络对抗》Web基础

    20155305<网络对抗>Web基础 实验过程 Web前端:HTML 使用netstat -aptn查看80端口是否被占用(上次实验设置为Apache使用80端口),如果被占用了就kil ...