• 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 (≤) which is the total number of nodes, and a positive K (≤). The address of a node is a 5-digit nonnegative integer, and NULL is represented by −.

    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 [, 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

    这题是链表题,我们需要用一个vector模拟链表,将小于链表的数字放在前面,大于链表的数字放在后面,我们定义3个vector即可。最后按序输出即可

    #include <iostream>
    #include <unordered_map>
    #include <vector>
    #include <deque>
    using namespace std;
    struct node {
        int addr, val, next;
    }tmp;
    unordered_map<int, node> m;
    vector<node> v, bef, aft;
    deque<node> deq;
    int main() {
        int start, N, K;
        cin >> start >> N >> K;
        while(N--) {
            cin >> tmp.addr >> tmp.val >> tmp.next;
            m[tmp.addr] = tmp;
        }
        while(start != -1) {
            v.push_back(m[start]);
            start = m[start].next;
        }
        for(auto& x: v) {
            if(x.val > K) aft.push_back(x);
            else if(x.val < 0) bef.push_back(x);
            else deq.push_back(x);
        }
        for(auto& x: aft) deq.push_back(x);
        for(auto& x: deq) bef.push_back(x);
        printf("%05d %d", bef[0].addr, bef[0].val);
        for(int i = 1; i < bef.size(); i++)
            printf(" %05d
    %05d %d", bef[i].addr, bef[i].addr, bef[i].val);
        printf(" -1
    ");
        return 0;
    }
  • 相关阅读:
    症状解,杠杆解
    分页[转]
    如何用SVN版本控制器将提交的文件还原到以前的版本
    VN问题:error:请求的名称有效,但是找不到请求的类型的
    客户端怎么查看SVN的代码库
    VisualSVN Server的配置和使用方法
    2017年04月19日
    github 添加geilibuy仓库,给力百货开放源代码
    gae crawler
    windows python相关工具
  • 原文地址:https://www.cnblogs.com/littlepage/p/12827312.html
Copyright © 2020-2023  润新知