PAT B1075 Clasificación de elementos de lista vinculada (25 puntos)

Inserte la descripción de la imagen aquí
Esta pregunta puede abrir una matriz para guardar la dirección y luego recorrer la lista vinculada original tres veces, la primera vez para encontrar las direcciones de todos los nodos negativos, la segunda vez para encontrar todos los nodos con el valor de intervalo de [0, k ], y la tercera vez para encontrar Todos los nodos mayores que k también puede garantizar que todas las direcciones guardadas también estén organizadas en el orden interno original.

#include <cstdio>

struct Node{
    
    
	int ad;
	int data;
	int next;
}node[100010];

int main(){
    
    
	int head, n, k;
	scanf("%d %d %d", &head, &n, &k);
	
	for(int i=0; i<n; i++){
    
    
		int ad;
		scanf("%d", &ad);
		node[ad].ad = ad;
		scanf("%d %d", &node[ad].data, &node[ad].next);
	}
	
	int arr[n];
	int num = 0;
	int h = head;
	while(h != -1){
    
    
		if(node[h].data < 0){
    
    
			arr[num++] = h;
		}
		h = node[h].next;
	}
	h = head;
	while(h != -1){
    
    
		if(node[h].data>=0 && node[h].data<=k){
    
    
			arr[num++] = h;
		}
		h = node[h].next;
	}
	h = head;
	while(h != -1){
    
    
		if(node[h].data > k){
    
    
			arr[num++] = h;
		}
		h = node[h].next;
	}
	for(int i=0; i<num-1; i++){
    
    
		printf("%05d %d %05d\n", arr[i], node[arr[i]].data, arr[i+1]);
	}
	printf("%05d %d -1", arr[num-1], node[arr[num-1]].data);
	
	
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113894610
Recomendado
Clasificación