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 ...
随机推荐
- 002Conditional条件化创建bean
01.条件化配置bean @Bean @Conditional(MagicExistsCondition.class)---->条件化创建bean public MagicBean magicB ...
- kali 的端口扫描nmap
输入“nmap+空格+“-O”+空格+IP地址或域名. 扫描所有TCP端口:输入“nmap+空格+“-sT”+空格+IP地址或域名” 扫描所有开放的UDP端口:输入“nmap+空格+”-sP”+空格+ ...
- 学习ssm心得
学习是一个探索的过程,在我编程能力提高的阶段中,我发现在编写代码之前,必须得弄清代码的逻辑,我到底要干什么,从哪一步做起.端与端之间该怎么衔接. 先把问题想清楚,再去编写.不要急着去乱敲一通,一点用处 ...
- weixin设置菜单
https://jingyan.baidu.com/article/925f8cb8dfcf11c0dce05661.html
- leetcode Ch2-Dynamic Programming II
一. Longest Valid Parentheses 方法一.一维DP class Solution { public: int longestValidParentheses(string s) ...
- CALayer的additive属性解析
CALayer的additive属性解析 效果: 源码:https://github.com/RylanJIN/ShareOfCoreAnimation // // CAPartAViewContro ...
- 随手记C#资料
1.where T: new()where后的称为泛型约束,这里约束泛型参数T必须具有无参的构造函数 2.判断路径是本地路径还是网址 private static bool IsLocalPath(s ...
- WINDBG解决cpu占高的问题
https://blog.csdn.net/yenange/article/details/62886988 https://blog.csdn.net/zhushentian/article/det ...
- Spring学习---Spring中利用jackson进行JSON转换
Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...
- SP2-0734: unknown command beginning "lsnrctl st..." - rest of line ignored.
SP2-0734: unknown command beginning "lsnrctl st..." - rest of line ignored. Cause(原因):Comm ...