PAT B1075リンクリスト要素の分類(25ポイント)

ここに画像の説明を挿入
この質問では、配列を開いてアドレスを保存し、元のリンクリストを3回トラバースできます。最初はすべての負のノードのアドレスを検索し、2回目は間隔値が[0、k]のすべてのノードを検索します。 ]、およびkより大きいすべてのノードを見つける3回目も、保存されたすべてのアドレスが元の内部順序で配置されていることを確認できます。

#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;
}

おすすめ

転載: blog.csdn.net/weixin_45964844/article/details/113894610