Esercizio #5
Lezione 14 di 14 del corso Lista concatenata - Serie sulle strutture dati #5 di Coddy.
Sfida
FacileDato un array di interi arr (i valori di una lista concatenata) e un intero positivo n, scrivi una funzione nthFromEnd che restituisca il valore dell’n-esimo nodo a partire dalla fine (indicizzazione a partire da 1).
Se n è fuori dai limiti (zero, negativo o maggiore della lunghezza della lista), restituisci -1.
Usa una lista concatenata per risolvere questo problema! Il classico trucco dei due puntatori evita di dover effettuare un passaggio per contare la lunghezza.
Devi usare la classe LinkedList (fornita in linkedlist.<ext> insieme a node.<ext>) — non usare funzionalità integrate nel linguaggio, come il metodo reverse degli array, lo slicing o le operazioni sulle liste della libreria standard, per calcolare il risultato.
Provalo tu
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line1[8192];
char line2[64];
if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line1, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int n = atoi(line2);
int r = nthFromEnd(arr, len, n);
printf("%d\n", r);
return 0;
}
Tutte le lezioni di Lista concatenata - Serie sulle strutture dati #5
Esercitati da solo: Compilatore C online