• 1133 Splitting A Linked List


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

    题意:

      给出一个自定义的链表,将链表按照要求的顺序输出。

    思路:

      构造一个结构体来表示节点,开一个数组用下标来表示结点的地址,根据结点地址遍历数组,将符合要求的结点依次放入ans中,最后将ans中的数据输出即可。

    Code:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 struct Node {
     6     int address;
     7     int date;
     8     int next;
     9 };
    10 
    11 int main() {
    12     int first, n, k;
    13     cin >> first >> n >> k;
    14     vector<Node> v(100005), ans;
    15     int address, date, next;
    16     for (int i = 0; i < n; ++i) {
    17         cin >> address >> date >> next;
    18         v[address] = {address, date, next};
    19     }
    20     address = first;
    21     for (; address != -1; address = v[address].next)
    22         if (v[address].date < 0) ans.push_back(v[address]);
    23 
    24     address = first;
    25     for (; address != -1; address = v[address].next)
    26         if (v[address].date >= 0 && v[address].date <= k)
    27             ans.push_back(v[address]);
    28     address = first;
    29     for (; address != -1; address = v[address].next)
    30         if (v[address].date > k) ans.push_back(v[address]);
    31     printf("%05d %d", ans[0].address, ans[0].date);
    32     for (int i = 1; i < ans.size(); ++i) {
    33         printf(" %05d
    %05d %d", ans[i].address, ans[i].address, ans[i].date);
    34     }
    35     printf(" -1
    ");
    36     return 0;
    37 }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
    Node.js
    AC多模式匹配算法
    红黑树的实现原理
    OAuth2.0 用户验证授权标准 理解
    SNMP 和 NetBios协议理解
    使用RSA非对称密钥算法实现硬件设备授权
    常用
    目录列表
    Memcache的 简介
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12736432.html
Copyright © 2020-2023  润新知