zoukankan      html  css  js  c++  java
  • 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
    
     1 package com.hone.basical;
     2 
     3 import java.util.LinkedList;
     4 import java.util.List;
     5 import java.util.Scanner;
     6 /**
     7  * 原题目:https://www.patest.cn/contests/pat-b-practise/1075
     8  * @author Xia
     9  * 思路:思考的是有点复杂,首先将所有的元素都装入一个链表中
    10  *         然后按照地址来调整顺序
    11  *         最后分别按照三个部分调整元素(小于零,[0,k],大于K)
    12  */
    13 
    14 public class basicalLevel1075LinkedElementClassify {
    15 
    16     public static void main(String[] args) {
    17         Scanner in = new Scanner(System.in);
    18         
    19         List<NodeNum> listN = new LinkedList<>();
    20         int firstAdd = in.nextInt();
    21         int nodeNum = in.nextInt();
    22         int k = in.nextInt();
    23         //将所有的数据添加到链表中
    24         for (int i = 0; i < nodeNum; i++) {
    25             NodeNum nn = new NodeNum();
    26             nn.Address = in.nextInt();
    27             nn.Date = in.nextInt();
    28             nn.Next = in.nextInt();
    29             listN.add(nn);
    30         }
    31         
    32         List<NodeNum> reverList = new LinkedList<>();
    33         int index = 0;
    34         //调整链表顺序
    35         int h = 0;
    36         while (!listN.isEmpty()){
    37             if (listN.get(h).Address == firstAdd) {
    38                 reverList.add(listN.get(h));
    39                 listN.remove(h);
    40                 break;
    41             }
    42             h++;
    43         }
    44         while (!listN.isEmpty()) {
    45             if (reverList.get(index).Next == listN.get(h).Address) {
    46                 reverList.add(listN.get(h));
    47                 listN.remove(h);
    48                 index++;
    49                 h = 0;
    50             }else {
    51                 h++;
    52             }
    53         }
    54         
    55         List<NodeNum> LessZero = new LinkedList<>(); 
    56         List<NodeNum> betweenK = new LinkedList<>();
    57         List<NodeNum> biggerK = new LinkedList<>();
    58         for (int i = 0; i < reverList.size(); i++) {
    59             int testData = reverList.get(i).Date;
    60             if (testData < 0) {
    61                 LessZero.add(reverList.get(i));
    62             }else if (testData<=k&&testData>=0) {
    63                 betweenK.add(reverList.get(i));
    64             }else if (testData>k) {
    65                 biggerK.add(reverList.get(i));
    66             }
    67         }
    68         
    69         LessZero.addAll(betweenK);
    70         LessZero.addAll(biggerK);
    71         for (int i = 0; i < LessZero.size(); i++) {
    72             if (i == LessZero.size()-1) {
    73                 System.out.printf("%05d %d %d%n", LessZero.get(i).Address,LessZero.get(i).Date,
    74                     -1);
    75             }else {
    76                 System.out.printf("%05d %d %05d%n", LessZero.get(i).Address,LessZero.get(i).Date,
    77                         LessZero.get(i+1).Address);
    78             }
    79         }
    80     }
    81 } 
    82 
    83 /**
    84  * 定义一个结点类
    85  * @author Xia
    86  */
    87 class NodeNum{
    88     int Address;
    89     int Date;
    90     int Next;
    91 }
  • 相关阅读:
    HDU 3714 Error Curves【三分查找】【经典题】
    HDU 3714 Error Curves【三分查找】【经典题】
    HDU 3711 Binary Number【水题】【bitset】
    HDU 3711 Binary Number【水题】【bitset】
    HDU 4689 Derangement【DP递推】【好题】【思维题】
    HDU 4689 Derangement【DP递推】【好题】【思维题】
    HDU 4055 Number String【DP递推+递推优化】【好题】
    HDU 4055 Number String【DP递推+递推优化】【好题】
    HDU 4054 Hexadecimal View【模拟】【字符串处理】
    HDU 4054 Hexadecimal View【模拟】【字符串处理】
  • 原文地址:https://www.cnblogs.com/xiaxj/p/8006241.html
Copyright © 2011-2022 走看看