给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[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)的更多相关文章

  1. PAT Basic 1075 链表元素分类(25) [链表]

    题目 给定⼀个单链表,请编写程序将链表元素进⾏分类排列,使得所有负值元素都排在⾮负值元素的前⾯,⽽[0, K]区间内的元素都排在⼤于K的元素前⾯.但每⼀类内部元素的顺序是不能改变的.例如:给定链表为 ...

  2. PAT Basic 1075 链表元素分类 (25 分)

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 ...

  3. PAT 1075 链表元素分类

    https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880 给定一个单链表,请编写程序将链表元素进行分类 ...

  4. PAT(B) 1075 链表元素分类(Java)

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

  5. P1075 链表元素分类

    P1075 链表元素分类 转跳点:

  6. 【PAT】B1075 链表元素分类(25 分)

    这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...

  7. PAT甲级 链表题_C++题解

    链表处理 PAT (Advanced Level) Practice 链表题 目录 <算法笔记> 重点摘要:静态链表 1032 Sharing (25) 1052 Linked List ...

  8. [LeetCode] Remove Linked List Elements 移除链表元素

    Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...

  9. Web前端开发基础 第四课(CSS元素分类)

    元素分类 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <di ...

随机推荐

  1. bnu 10783 格斗游戏 线段与圆的关系

    格斗游戏 Time Limit: 1000ms Memory Limit: 65536KB   64-bit integer IO format: %lld      Java class name: ...

  2. fuzhou 1692 Key problem ***

    Problem 1692 Key problem Accept: 103    Submit: 553 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  3. CSS之Flex 布局

    Flex 布局教程:语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些 ...

  4. rocketmq 控制台 trackType NOT_CONSUME_YET

    1. 问题描述 rocketmq消费者偶有没有收到消息,查看后台, 显示NOT_CONSUME_YET 2. 分析 mq控制台 显示有该条消息数据 只是状态为未消费 那么问题应该出在 消费者一方 诶? ...

  5. Tarjan系列1

    tajan的dfs树系列算法: 求解割点,桥,强连通分量,点双联通分量,边双联通分量: tajan是一个dfs,把一个图变成一个dfs树结构, dfs树结构,本质是通过一个没有任何要求的dfs把图的边 ...

  6. JavaScript周报#184

    This week’s JavaScript news Read this issue on the Web | Issue Archive JavaScript Weekly Issue 184Ju ...

  7. js笔记 -- toString() 和String()

    将一个值转换成一个字符串有两种方法,一是使用toString()方法,二是使用转型函数String().下面是一些需要注意的问题: 1,大多值都有toString()方法,因为toString是Obj ...

  8. 配置文件出错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): <!-- mybatis 配置- ...

  9. arcgis10.2 serverstyle 制作工具位置 小计

    跟9.3时候的套路还是一样的,只是工具已经放到了arcgis desktop的安装目录的bin文件夹下面. engine和developerkit都不附带该工具. 但是engine会附带一组默认的转换 ...

  10. shrio的知识储备

    博客讲解; shrio的知识储备 shrio的简单认识 笔记整理地址: Shrio.pdf 下载 Shrio理论.doc 下载 Shrio知识储备.doc  下载 Shrio的知识储备 (一)   S ...