• 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)
  • 相关阅读:
    Java swing生成图片验证码
    Spring关于事物的面试题
    SSM跨域拦截设置
    servlet实现图片上传工具类
    layUI框架table.render发送请求,数据返回格式封装
    @PathVariable、@requestParam 和@param的区别
    @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping用法
    Java之数组的拷贝
    Linux之磁盘分区和挂载
    Linux之磁盘情况查询
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12736432.html
Copyright © 2020-2023  润新知