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 ...
随机推荐
- MySQL安装再折腾--编码的设置
一.MySQL的安装 从官网(https://dev.mysql.com/downloads/mysql/)中下载Mac OS X 10.12 (x86, 64-bit), DMG Archive(m ...
- python学习之老男孩python全栈第九期_day026知识点总结——封装、property、类方法、初识反射
一. 封装 class Room: def __init__(self, name, length, width): self.__name = name self.__length = length ...
- js中contains()方法的了解
今天第一次碰到了contains()方法,处于好奇了解了一下:发现在某些场合还是挺有用的. contains(),js原生方法,用于判断DOM元素的包含关系: 需要注意的是:它以HTMLElement ...
- BZOJ1021 [SHOI2008]循环的债务
Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题. 不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务 ...
- 判断数组内是否有几个元素之和等于m
#include<iostream> using namespace std; ]; int f(int n,int m) { ||m-a[n]==); &&m-a[n]! ...
- Angular进阶教程二
6.2自定义指令详解 angular的指令机制.angular通过指令的方式实现了HTML的扩展,增强后的HTML不仅长相焕然一新,同时也获得了很多强大的技能.更厉害的是,你还可以自定义指令,这就意味 ...
- PHP两种实现无级递归分类的方法
/** * 无级递归分类 TP框架 * @param int $assortPid 要查询分类的父级id * @param mixed $tag 上下级分类之间的分隔符 * @return strin ...
- 如何用kindle看论文
kindle的pdf显示效果向来不好,那么如何把pdf转换成mobi格式呢 可以把个人文件(pdf)发送至您的[发送至Kindle]电子邮箱时,在电子邮件的主题栏中填写"convert&qu ...
- 本地调试接口返回信息不对 以及 jar冲突问题
今天下午在本地调试的时候碰到个很奇怪的问题:服务调用接口,返回的明明是有数据的,然后通过gson转换对象后,对象里面并没有自己想要的数据.看了代码什么的都没有问题.思考到底是哪里出了问题,想了半天想到 ...
- 需求分析之WBS
我们的产品就是当你把废旧的塑料瓶和电池投入回收箱中会产生能量,那么这能量可以干嘛呢那就通过我们的APP进行扫码记录所产生的能量这写能量可以在我们的APP的换吧中进行兑换用户所需要的东西比如:共享单车的 ...