给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值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. MSChart 设置饼图颜色 图例背景色 图例显示位置

    chartField.Series.Clear();            chartField.ChartAreas.Clear();            chartField.Legends.C ...

  2. github与本地电脑关联配置

    参考文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137438585 ...

  3. jstl格式化日期

    <%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import=& ...

  4. HTML5新特性postMessage解决跨域

    window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息.基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信.让我们来看一下 ...

  5. Win8下IIS的安装和站点的公布

    版权声明:本文为博主原创文章,不经博主同意注明链接就可以转载. https://blog.csdn.net/Senior_lee/article/details/32939411         之前 ...

  6. BZOJ2115:[WC2011] Xor(线性基)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  7. js 判断元素是否在列表中

    /** * 使用循环的方式判断一个元素是否存在于一个数组中 * @param {Object} arr 数组 * @param {Object} value 元素值 */ function isInA ...

  8. Spring boot结合mybatis开发的报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),经过排查确定是没有找到xml的原因 ...

  9. 4、JUC--CountDownLatch闭锁

    CountDownLatch  Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能.  CountDownLatch 一个同步辅助类,在完 ...

  10. 记一次MyBatis的错误

    错误信息:java.lang.StackOverflowError 关于这个错误的深度解析,大家可以参考这篇博文,比较详细:https://blog.csdn.net/zc375039901/arti ...