PTA-L2-022 연결된 목록 재정렬(25점)

PTA-L2-022 연결된 목록 재정렬(25점)

이 질문은 연결 목록에 관한 것입니다.
배열을 직접 처리할 수 있습니다.
여기서 이야기하고 싶은 것은 출력 상황입니다.
저장할 때 각 노드에 연결된 목록의 순서대로 해당 인덱스를 부여합니다.
그런 다음 이 색인에 따라 재정렬하십시오.
출력 시 홀수와 짝수의 출력에 주의하세요.

또한 출력 노드의 다음 노드 필드는 재수강 후의 주소로 변경해야 합니다.
"-1"의 경우에 특히 주의하십시오.

코드 부분:

#include <bits/stdc++.h>
#define mst(a, n) memset(a, n, sizeof(a))
using namespace std;
const int N = 1e5 + 10;
const int M = 55;
const int INF = 1e6 + 10;
const double eps = 0.05;
typedef long long ll;

struct node
{
    
    
	int adr;
	int data;
	int nex;
	int index;
}a[N];
int n, ad;

bool cmp(node x, node y)
{
    
    
	return x.index < y.index;	
}

int main()
{
    
    
	for (int i = 0; i < N; i++)
	{
    
    
		a[i].index = INF;
	}
	cin >> ad >> n;
	for (int i = 0; i < n; i++)
	{
    
    
		int t;
		scanf ("%d", &t);
		a[t].adr = t;
		scanf ("%d%d", &a[t].data, &a[t].nex);
	}
	int star = ad;
	int cnt = 1;
	while (star != -1)
	{
    
    
		a[star].index = cnt;
		cnt++;
		star = a[star].nex;
	}
	sort(a, a + N, cmp);
	int i = 0, j = n - 1;
	cnt--;
	for (int i = 0; i < cnt / 2; i++)
	{
    
    
		printf ("%05d %d %05d\n", a[cnt - i - 1].adr, a[cnt - i - 1].data, a[i].adr);
		if (!(cnt & 1) && (i == cnt / 2 - 1))
		{
    
    
			printf ("%05d %d -1\n", a[i].adr, a[i].data);
		}
		else
		{
    
    
			printf ("%05d %d %05d\n", a[i].adr, a[i].data, a[cnt - i - 2].adr);
		}
	}
	if (cnt & 1)
	{
    
    
		printf ("%05d %d -1\n", a[cnt / 2].adr, a[cnt / 2].data);
	}
	return 0;
} 

추천

출처blog.csdn.net/qq_44624316/article/details/110240750