1. Descripción del título
Especificación de entrada:
Especificación de salida:
Para cada caso, genere la lista enlazada ordenada resultante. Cada nodo ocupa una línea y se imprime en el mismo formato que en la entrada.
Entrada de muestra:
00100 6 4
00000 4 99999
00100 1 12309
68237
6-1 33218 3 00000
99999 5 68237
12309 2 33218
Salida de muestra:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6-1
Dos ideas para resolver problemas
Preguntas de inversión de listas vinculadas, similares a las preguntas generales de listas vinculadas, creamos una estructura para representar el nodo, que contiene datos y apunta a la dirección. Use un bucle while para construir una lista vinculada, almacene la dirección en el vector <int> add y luego cree un bucle para voltear cada K elementos, es decir, para reorganizar las direcciones y finalmente la salida. Este tipo de preguntas de lista enlazada debe hacerse más y se sentirá bien si hace más.
Tres, código de CA
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 100001;
struct Node
{
int data, next;
}node[maxn];
int main()
{
int first, N, K, tmp;
vector<int> add;
scanf("%d%d%d", &first, &N, &K);
for(int i=0; i<N; i++)
{
scanf("%d", &tmp);
scanf("%d%d", &node[tmp].data, &node[tmp].next);
}
tmp = first;
while(tmp != -1)
{
add.push_back(tmp);
tmp = node[tmp].next;
}
int sze = add.size();
for(int i=0; i+K<=sze; i += K) //有效链表元素数为size
{
reverse(add.begin()+i, add.begin()+i+K);
}
for(int j=0; j<sze-1; j++)
{
printf("%05d %d %05d\n", add[j], node[add[j]].data, add[j+1]);
}
printf("%05d %d -1\n", add[sze-1], node[add[sze-1]].data);
return 0;
}