给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K为10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。

输入格式:

每个输入包含1个测试用例。每个测试用例第1行给出:第1个结点的地址;结点总个数,即正整数N (<= 105);以及正整数K (<=1000)。结点的地址是5位非负整数,NULL地址用-1表示。

接下来有N行,每行格式为:

Address Data Next

其中Address是结点地址;Data是该结点保存的数据,为[-105, 105]区间内的整数;Next是下一结点的地址。题目保证给出的链表不为空。

输出格式:

对每个测试用例,按链表从头到尾的顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218

输出样例:

33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1

分析:将结点用list[10000]保存,list为node类型,node中保存结点的值value和它的next地址。list的下标就是结点的地址。将<0、0~k、>k三部分的结点地址分别保存在v[0]、v[1]、v[2]中,最后将vector中的值依次输出即可~

#include <iostream>
#include <vector>
using namespace std;
struct node {int data, next;
}list[100000];
vector<int> v[3];
int main() {int start, n, k, a;scanf("%d%d%d", &start, &n, &k);for (int i = 0; i < n; i++) {scanf("%d", &a);scanf("%d%d", &list[a].data, &list[a].next);}int p = start;while(p != -1) {int data = list[p].data;if (data < 0)v[0].push_back(p);else if (data >= 0 && data <= k)v[1].push_back(p);elsev[2].push_back(p);p = list[p].next;}int flag = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < v[i].size(); j++) {if (flag == 0) {printf("%05d %d ", v[i][j], list[v[i][j]].data);flag = 1;} else {printf("%05d\n%05d %d ", v[i][j], v[i][j], list[v[i][j]].data);}}}printf("-1");return 0;
}

1075. 链表元素分类(25)-PAT乙级真题相关推荐

  1. C++学习之路 | PTA乙级—— 1075 链表元素分类 (25 分)(精简)

    1075 链表元素分类 (25 分) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元 ...

  2. 【超简洁】1075 链表元素分类 (25分)_34行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间 ...

  3. 【PAT乙级】1075 链表元素分类 (25 分)

    题目地址 #include<cstdio> #include<iostream> #include<map> using namespace std; const ...

  4. 1012. 数字分类 (20)-PAT乙级真题

    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4-: A3 ...

  5. 1045. 快速排序(25)-PAT乙级真题

    原题: 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列, ...

  6. 1050. 螺旋矩阵(25)-PAT乙级真题

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  7. 1080. MOOC期终成绩 (25)-PAT乙级真题

    对于在中国大学MOOC(http://www.icourse163.org/)学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评 ...

  8. 1065. 单身狗(25)-PAT乙级真题

    "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数N(<=50000),是已知夫妻/ ...

  9. 1060. 爱丁顿数(25)-PAT乙级真题

    英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数"E,即满足有E天骑车超过E英里的最大整数E.据说爱丁顿自己的E等于87. 现给定某人N天的骑车距 ...

最新文章

  1. 修复“-bash: locate: command not found”
  2. [Angular 2] @ngrx/devtools demo
  3. 译: 5. RabbitMQ Spring AMQP 之 Topic 主题
  4. eclipse性能优化
  5. 容易忽视的十大SQL优化方案!
  6. 《剑指offer》包含min函数的栈
  7. C# 事件(第四章)
  8. LetCode-MSSQL查找重复的电子邮箱
  9. mysql数据库名长可为64字符,MySQL学习笔记1_MySQL
  10. numpy实现BN层
  11. 故障:PDF 文件打印失败
  12. [方便WAP网站开发]在线手机WAP模拟器或软件
  13. 找不到方向?10大热门大数据应用领域总有一款适合你
  14. 【数据结构】leetcode707:python实现链表设计;leetcode142:环形链表
  15. 回顾– DRAMS 4.0域注册软件
  16. Verilog加法器设计
  17. 【213】《原则》Principles摘抄+读后感一--做个有原则的人
  18. Win10 易升更新 安装wls2 部署docker
  19. 沈阳学计算机Excel,沈阳excel培训点
  20. tekton taskrun资源

热门文章

  1. JAVA开发必须掌握的21个核心技术
  2. 为什么你的缓存更新策略是先更新数据库后删除缓存,讲讲其他的情况有什么问题?...
  3. (八)Hibernate的一对多关联关系
  4. 苹果电脑系统、xcode更新时无法完成下载问题
  5. php mysql_affected_rows获取sql执行影响的行数
  6. 用sql的select语句从数据库中获取数据
  7. 理解嵌入式开发中的一些硬件相关的概念
  8. 解决电脑启动报:Reboot and select proper boot device
  9. LVS+Heartbeat+Ipvsadm+Ldirectord安装 (一)
  10. 利用OpenIPMI监控服务器温度