PAT——1075. 链表元素分类(25)
给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[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
package com.hone.basical; import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/**
* 原题目:https://www.patest.cn/contests/pat-b-practise/1075
* @author Xia
* 思路:思考的是有点复杂,首先将所有的元素都装入一个链表中
* 然后按照地址来调整顺序
* 最后分别按照三个部分调整元素(小于零,[0,k],大于K)
*/ public class basicalLevel1075LinkedElementClassify { public static void main(String[] args) {
Scanner in = new Scanner(System.in); List<NodeNum> listN = new LinkedList<>();
int firstAdd = in.nextInt();
int nodeNum = in.nextInt();
int k = in.nextInt();
//将所有的数据添加到链表中
for (int i = 0; i < nodeNum; i++) {
NodeNum nn = new NodeNum();
nn.Address = in.nextInt();
nn.Date = in.nextInt();
nn.Next = in.nextInt();
listN.add(nn);
} List<NodeNum> reverList = new LinkedList<>();
int index = 0;
//调整链表顺序
int h = 0;
while (!listN.isEmpty()){
if (listN.get(h).Address == firstAdd) {
reverList.add(listN.get(h));
listN.remove(h);
break;
}
h++;
}
while (!listN.isEmpty()) {
if (reverList.get(index).Next == listN.get(h).Address) {
reverList.add(listN.get(h));
listN.remove(h);
index++;
h = 0;
}else {
h++;
}
} List<NodeNum> LessZero = new LinkedList<>();
List<NodeNum> betweenK = new LinkedList<>();
List<NodeNum> biggerK = new LinkedList<>();
for (int i = 0; i < reverList.size(); i++) {
int testData = reverList.get(i).Date;
if (testData < 0) {
LessZero.add(reverList.get(i));
}else if (testData<=k&&testData>=0) {
betweenK.add(reverList.get(i));
}else if (testData>k) {
biggerK.add(reverList.get(i));
}
} LessZero.addAll(betweenK);
LessZero.addAll(biggerK);
for (int i = 0; i < LessZero.size(); i++) {
if (i == LessZero.size()-1) {
System.out.printf("%05d %d %d%n", LessZero.get(i).Address,LessZero.get(i).Date,
-1);
}else {
System.out.printf("%05d %d %05d%n", LessZero.get(i).Address,LessZero.get(i).Date,
LessZero.get(i+1).Address);
}
}
}
} /**
* 定义一个结点类
* @author Xia
*/
class NodeNum{
int Address;
int Date;
int Next;
}
PAT——1075. 链表元素分类(25)的更多相关文章
- PAT Basic 1075 链表元素分类(25) [链表]
题目 给定⼀个单链表,请编写程序将链表元素进⾏分类排列,使得所有负值元素都排在⾮负值元素的前⾯,⽽[0, K]区间内的元素都排在⼤于K的元素前⾯.但每⼀类内部元素的顺序是不能改变的.例如:给定链表为 ...
- PAT Basic 1075 链表元素分类 (25 分)
给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 ...
- PAT 1075 链表元素分类
https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880 给定一个单链表,请编写程序将链表元素进行分类 ...
- PAT(B) 1075 链表元素分类(Java)
题目链接:1075 链表元素分类 (25 point(s)) 题目描述 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大 ...
- P1075 链表元素分类
P1075 链表元素分类 转跳点:
- 【PAT】B1075 链表元素分类(25 分)
这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...
- PAT甲级 链表题_C++题解
链表处理 PAT (Advanced Level) Practice 链表题 目录 <算法笔记> 重点摘要:静态链表 1032 Sharing (25) 1052 Linked List ...
- [LeetCode] Remove Linked List Elements 移除链表元素
Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...
- Web前端开发基础 第四课(CSS元素分类)
元素分类 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <di ...
随机推荐
- Angular中引入Bootstrap部分样式失效以及Jquery的$无法识别
大多数同学在模仿慕课网的时候可能会遇到引入bootstrap和jquery样式部分失效以及$符号报错,这里为大家提供正确的解决方案. 可能大家在引入试过col-md之后觉得bootstrap是ok的, ...
- System.out.println与System.err.println的区别
public class Test2 { static { System.out.println("1"); } { System.out.println("2" ...
- Node.js学习(篇章一)
<node.js的特点> 采用了异步式I/O与事件驱动的架构设计,架构为单线程模型. <supervisor包的作用> node.js开发项目,当修改项目时,需要终止进程重启N ...
- html5 移动端开发
移动端开发总结 目录 1.手机与浏览器 2.Viewport(视窗) 3. 媒体查询 4.px,em,rem,pt 5.设备像素比devicePixelRatio 6.移动web中的图标及字体 ...
- arcgis for js/flex/sl 该选哪一个?
arcgis server开发webgis 在客户端有3种选择:js.flex.sl 他们除了开发arcgis外,本身还有一些常用的领域 js:在传统网站中很常用 flex:游戏.视频播放.动画特效 ...
- Oracle 给字符串补空格、补0
利用lpad().RPAD()函数来实现给字符串补空格或补0的功能: 一.lpad()lpad函数将左边的字符串填充一些特定的字符其语法格式如下:lpad(string,n,[pad_string]) ...
- Selenium IDE录制脚本
一.当Selenium IDE中Format没有转换格式时,操作:Options—Options...—勾选Enable experimental features
- 【转】OmniGraffle (一)从工具栏开始
原文链接:http://www.jianshu.com/p/52f3ecbe8f2d OmniGraffle的软件布局和大多数图形类软件类似,中间是编辑区,左边是页面和对象组织的管理,右边是参数设置和 ...
- IIS7 使用server farms 进行负载均衡
1.首先,到微软官网下载web平台安装程序: https://www.microsoft.com/web/downloads/ 2.安装好后,会在IIS里有这个图标: 3.双击这个图标:安装 4.安装 ...
- Linux NFS 详解
目录: 1.了解NFS服务 2.NFS主要文件 3.NFS安装 4.NFS配置 5.NFS客户端配置 6.固定NFS端口 7.Windows挂 ...