• 1133 Splitting A Linked List (25 分)(链表)


    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

    题目大意:

    给一个链表和K,遍历链表后将<0的结点先输出,再将0~k区间的结点输出,最后输出>k的结点

    分析:

    将结点用list[10000]保存,list为node类型,node中保存结点的值value和它的next地址。list的下标就是结点的地址。将<0、0~k、>k三部分的结点地址分别保存在v[0]、v[1]、v[2]中,最后将vector中的值依次输出即可~

    原文链接:https://blog.csdn.net/liuchuo/article/details/78037305

    题解

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=100000;
    struct Node
    {
        int address,key,next;
    }node[maxn];
    int vis[maxn];
    int main()
    {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif
        int n,s,id,k;
        cin>>s>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>id;
            node[id].address=id;
            cin>>node[id].key>>node[id].next;
        }
        vector<int> v[3];
        for(int i=s;i!=-1;i=node[i].next){
            if(node[i].key<0){
                v[0].push_back(i);
            }else if(node[i].key>k){
                v[2].push_back(i);
            }else v[1].push_back(i);
        }
        int flag=0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < v[i].size(); j++) {
                if (flag == 0) {
                    printf("%05d %d ", v[i][j], node[v[i][j]].key);
                    flag = 1;
                } else {
                    printf("%05d\n%05d %d ", v[i][j], v[i][j], node[v[i][j]].key);
                }
            }
        }
        printf("-1");
        return 0;
    }
    
  • 相关阅读:
    使用mustache js模板引擎
    Application Cache API (二)
    scrollMonitor 滚动事件
    NPM中的那些库
    lodash 函数功能 boilerjs
    SeaJS 里版本号和时间戳管理的最佳实践
    开源前端框架纵横谈
    URI.js – 全能的URL操作库
    执行用户定义例程或聚合 "" 期间出现 .NET Framework 错误:
    一般ALV错误有两种情况
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15957602.html
Copyright © 2020-2023  润新知