• 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");
        }
    }
    

      

  • 相关阅读:
    Java学习笔记2.Java标识符和基本数据类型
    Java面试题库(四)
    Eclipse最常用的一些快捷键技巧
    心理学166个现象(很多,别一次看完!)[119]
    Java学习笔记1.Java发展及JDK配置
    SQL操作全集
    J2EE面试题库
    Java面试题库(一)
    Java程序员,面试必读
    Java面试题库(二)
  • 原文地址:https://www.cnblogs.com/0kk470/p/7929650.html
Copyright © 2020-2023  润新知