Nivel básico 1075 Clasificación de elementos de lista vinculada (25 puntos)

tema

Dada una lista enlazada individualmente, escriba un programa para ordenar y organizar los elementos de la lista enlazada de modo que todos los elementos negativos estén ordenados delante de los elementos no negativos, y los elementos en el intervalo [0, K] estén ordenados delante de los elementos mayores que K. Pero el orden de cada tipo de elementos internos no se puede cambiar. Por ejemplo: la lista vinculada dada es 18 → 7 → -4 → 0 → 5 → -6 → 10 → 11 → -2, K es 10, la salida debe ser -4 → -6 → -2 → 7 → 0 → 5 → 10 → 18 → 11.

Formato de entrada:

Cada entrada contiene un caso de prueba. La primera línea de cada caso de prueba da: la dirección del primer nodo; el número total de nodos, que es un entero positivo N (≤ 1 0 5) N (≤10 ^ 5)N ( 1 05 ); y entero positivoK (≤ 1 0 3) K (≤10 ^ 3)K ( 1 03 ). La dirección del nodo es un entero no negativo de 5 bits y la dirección NULL está representada por -1.

A continuación, hay N líneas, cada una de las cuales tiene el formato:

Address Data Next

Donde Dirección es la dirección del nodo; Datos son los datos guardados por el nodo, que es [- 1 0 5, 1 0 5] [−10 ^ 5,10 ^ 5][ - 1 05 ,1 05 ]Entero en el intervalo; Siguiente es la dirección del siguiente nodo. La pregunta garantiza que la lista enlazada proporcionada no está vacía.

Formato de salida:

Para cada caso de prueba, la lista enlazada de resultados reorganizados se emite en el orden desde el principio hasta el final de la lista enlazada, y cada nodo ocupa una fila con el mismo formato que la entrada.

Muestra de entrada:

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

Salida de muestra:

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

Análisis de pensamiento:

Use la matriz para simular la lista vinculada y guarde las tres partes menores que 0, 0 ~ k y mayores que k en el vector.

Código:

#include <iostream>
#include <vector>

using namespace std;

const int maxn = 100010;

int head, idx, e[maxn], ne[maxn], n, k;
vector<int> v[3];

int main(){
    
    
    cin >> head >> n >> k;
    for(int i  = 0; i < n; i++){
    
    
        cin >> idx;
        cin >> e[idx] >> ne[idx];
    }
    int p = head;
    while(p != -1){
    
    
        int data = e[p];
        if(data < 0)
            v[0].push_back(p);
        else if(data >= 0 && data <= k)
            v[1].push_back(p);
        else
            v[2].push_back(p);
        p = ne[p];
    }
    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], e[v[i][j]]);
                flag = 1;
            }else{
    
    
                printf("%05d\n%05d %d ", v[i][j], v[i][j], e[v[i][j]]);
            }
        }
    }
    cout << "-1" << endl;
    return 0;
}

PAT_BasicLevel

Supongo que te gusta

Origin blog.csdn.net/zy440458/article/details/113800276
Recomendado
Clasificación