zoukankan      html  css  js  c++  java
  • PAT1133:Splitting A Linked List

    1133. Splitting A Linked List (25)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    Given a singly linked list, you are supposed to rearrange its elements so that all the negative values appear before all of the non-negatives, and all the values in [0, K] appear before all those greater than K. The order of the elements inside each class must not be changed. For example, given the list being 18→7→-4→0→5→-6→10→11→-2 and K being 10, you must output -4→-6→-2→7→0→5→10→18→11.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (<= 105) which is the total number of nodes, and a positive K (<=1000). The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.

    Then N lines follow, each describes a node in the format:

    Address Data Next

    where Address is the position of the node, Data is an integer in [-105, 105], and Next is the position of the next node. It is guaranteed that the list is not empty.

    Output Specification:

    For each case, output in order (from beginning to the end of the list) the resulting linked list. Each node occupies a line, and is printed in the same format as in the input.

    Sample Input:
    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
    
    Sample Output:
    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

    思路

    逻辑水题,将一个链表划分成三个区间。

    代码
    #include<iostream>
    #include<vector>
    using namespace std;
    class node
    {
    public:
        int val;
        int next;
    };
    vector<node> nodes(100000);
    int main()
    {
        vector<vector<int>> res(3);
        int start,N,K;
        while(cin >> start >> N >> K)
        {
            for(int i = 0;i < N;i++)
            {
                int tmp;
                cin >> tmp;
                cin >> nodes[tmp].val >> nodes[tmp].next;
            }
            while(start != -1)
            {
                if(nodes[start].val < 0)
                    res[0].push_back(start);
                else if(nodes[start].val >= 0 && nodes[start].val <= K)
                    res[1].push_back(start);
                else
                    res[2].push_back(start);
                start = nodes[start].next;
            }
            int cnt = 0;
            for(int i = 0;i < res.size();i++)
            {
                for(int j = 0;j < res[i].size();j++)
                {
                    if(cnt++ == 0)
                    {
                        printf("%05d %d ",res[i][j],nodes[res[i][j]].val);
                    }
                    else
                    {
                        printf("%05d
    %05d %d ",res[i][j],res[i][j],nodes[res[i][j]].val);
                    }
                }
            }
            printf("-1");
        }
    }
    

      

  • 相关阅读:
    Dybala我错了%Dybala
    2019.7.22考试反思
    2019.7.19考试反思
    2019.7.18 考试反思
    数论总结之 乘法逆元
    数论总结之 卢卡斯定理
    游记 Day2
    【BSGS】Discrete Logging
    【卡特兰数】树屋阶梯
    【链接】 一篇很好的有关prufer序列的博文
  • 原文地址:https://www.cnblogs.com/0kk470/p/7929650.html
Copyright © 2011-2022 走看看