【数组模拟的链表or复杂模拟】PAT-L2-002. 链表去重
L2-002. 链表去重
给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点。即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留。同时,所有被删除的结点必须被保存在另外一个链表中。例如:另L为21→-15→-15→-7→15,则你必须输出去重后的链表21→-15→-7、以及被删除的链表-15→15。【删除后的节点全部接到一个新的链表里】
输入格式:
输入第一行包含链表第一个结点的地址、以及结点个数N(<= 105 的正整数)【数据范围不大,可以考虑用结构体数组存贮整体信息】。结点地址是一个非负的5位整数,NULL指针用-1表示。
随后N行,每行按下列格式给出一个结点的信息:
Address Key Next
其中Address是结点的地址,Key是绝对值不超过104的整数,Next是下一个结点的地址。
输出格式:
首先输出去重后的链表,然后输出被删除结点组成的链表。每个结点占一行,按输入的格式输出。
输入样例:
- 00100 5
- 99999 -7 87654
- 23854 -15 00000
- 87654 15 -1
- 00000 -15 99999
- 00100 21 23854
【输出时,要求分成两部分进行处理!每个地址要求占到5位,但是-1需要特殊考虑!】
- AC题解:
还是用数组模拟的链表哦!
befadd是“before-address”的简写,表示第一个链表的当前需要插入的节点的上个节点!
befadd2是“before-address2”的简写,表示第二个链表表示废弃链表的当前需要插入的节点的上个节点!
注意每次都要及时封住链表的尾部!
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<algorithm>
- #include<queue>
- #include<set>
- #include<string>
- #include<map>
- #define maxn 400000
- #define inf 0x3f3f3f3f
- using namespace std;
- #define N 100008
- struct node{
- int key,next;
- }a[N];
- int beg1,beg2;//两个链表的开头
- bool vis[N];
- int main(){
- int n;
- while(scanf("%d%d",&beg1,&n)!=EOF){
- int add,key,next;
- for(int i=;i<n;i++){
- scanf("%d%d%d",&add,&key,&next);
- a[add].key=key,a[add].next=next;
- }
- memset(vis,false,sizeof(vis));
- int u=beg1;
- beg2=-;
- int bef1add=-;
- int befadd;
- while(u!=-){
- if(vis[abs(a[u].key)]==true){//加入废弃的链接节点里
- int u2=a[u].next;
- if(beg2==-){
- beg2=u;
- befadd=u;
- a[u].next=-;
- }else{
- a[befadd].next=u;
- a[u].next=-;
- befadd=u;
- }
- u=u2;
- }
- else{//非废弃的链表
- if(bef1add!=-){
- a[bef1add].next=u;
- bef1add=-;
- }
- vis[abs(a[u].key)]=true;
- int u2=a[u].next;
- if(vis[abs(a[u2].key)]==true){
- a[u].next=-;
- bef1add=u;
- }
- u=u2;
- }
- }
- //输出
- cout<<endl;
- while(beg1!=-){
- if(a[beg1].next==-)
- printf("%05d %d %d\n",beg1,a[beg1].key,-);
- else
- printf("%05d %d %05d\n",beg1,a[beg1].key,a[beg1].next);
- beg1=a[beg1].next;
- }
- while(beg2!=-){
- if(a[beg2].next==-)
- printf("%05d %d %d\n",beg2,a[beg2].key,-);
- else
- printf("%05d %d %05d\n",beg2,a[beg2].key,a[beg2].next);
- beg2=a[beg2].next;
- }
- }
- return ;
- }
【数组模拟的链表or复杂模拟】PAT-L2-002. 链表去重的更多相关文章
- Linux 内核 链表 的简单模拟(2)
接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the & ...
- Linux 内核 链表 的简单模拟(1)
第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 struct student { int a; //FIND(struct stu ...
- 【链表】【模拟】Codeforces 706E Working routine
题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别 ...
- PAT甲级专题|链表
PAT链表专题 关于PAT甲级的链表问题,主要内容 就是"建立链表" 所以第一步学会模拟链表,pat又不卡时间,这里用vector + 结构体,更简洁 模拟链表的普遍代码 cons ...
- PAT B1025 反转链表 (25 分)
给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...
- PAT Basic 1075 链表元素分类(25) [链表]
题目 给定⼀个单链表,请编写程序将链表元素进⾏分类排列,使得所有负值元素都排在⾮负值元素的前⾯,⽽[0, K]区间内的元素都排在⼤于K的元素前⾯.但每⼀类内部元素的顺序是不能改变的.例如:给定链表为 ...
- PAT Basic 反转链表 (25) [链表]
题目 给定⼀个常数K以及⼀个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6, ...
- 代码随想录第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、160.链表相交、142.环形链表II
今天链表致死量 第一题 public static class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { ...
- 牛客网:将两个单调递增的链表合并为一个单调递增的链表-Python实现-两种方法讲解
方法一和方法二的执行效率,可以大致的计算时间复杂度加以对比,方法一优于方法二 1. 方法一: 思路: 1. 新创建一个链表节点头,假设这里就叫 head3: 2. 因为另外两个链表都为单调递增,所 ...
- c++单链表冒泡排序(交换结点),链表增删改查,运算符重载
#include <iostream> #include <stdlib.h> #include <time.h> #include <fstream> ...
随机推荐
- 如何解决mac brew遇到无法下载的依赖?
使用brew安装软件时,需要下载依赖包,但是如果依赖包特别大的时候,就很容易失败:brew本身不支持断点续传:但是可以使用wget -c的方式断点续传的下载依赖:下载完如何给brew安装使用呢?参考: ...
- Spring MVC如何获取请求中的参数
目录 一.获取URL中路径参数 1.1 @PathVariable 注解 1.2 @PathParam 注解 二.获取请求参数: 2.1 GET请求 2.1.1 获取请求中的单个参数:@Request ...
- servlet中ServletContainerInitializer的简单说明
根据官方文档到的说明 public interface ServletContainerInitializer Interface which allows a library/runtime to ...
- idea添加svn项目的两种方法
1.是直接用svn客户端检出后,在idea直接打开其项目. 2.直接在idea里面拉取svn的项目
- [DFS]排队(间隔排列)-C++
Description 小Q是班长.在校运动会上,小Q班要进行队列表演.小Q要选出2*N名同学编队,每人都被编上一个号,每一个从1到N的自然数都被某2名同学佩戴,现在要求将他们排成一列,使两个编号为1 ...
- spring 整合guava
一.ApplicationContext.xml中的配置 <!--开启缓存注解--> <cache:annotation-driven /> <bean id=" ...
- Git服务器搭建--ssh/http
测试环境 Windows 7 Ultimate, 64-bit 6.1.7601, Service Pack 1(实体机,虚拟机VMware的宿主机) VMware® Workstation 7.1. ...
- docker 实践八:docker-compose
本篇介绍 docker 官方三剑客之一的 docker-compose. 注:环境为 CentOS7,docker 19.03. docker-compose docker-compose 的前身是开 ...
- 学习RadonDB源码(三)
1. 所谓第四代语言 SQL是一种典型的第四代语言,即4GL,这种语言的突出特点是编写者不需要关注怎么做,只需要告诉系统我要什么就可以. 虽然4GL是这样的一种语言,大大简化了编写者的编写难度,其实底 ...
- 在Linux上安装Zookeeper集群
xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.——这才是真正的堪称强大!! - ...