PDA

View Full Version : [C] Ruotare lista


Marco20122012
31-08-2016, 21:39
Salve, devo svolgere il seguente esercizio:

Con riferimento alla struttura SCL descritta di seguito
struct NodoSCL {
int info;
struct NodoSCL*next;
};
typedef NodoSCL* TipoSCL;
implementare la seguente funzione C:
int rotateList(int** v, TipoSCL src, int num);
che dati:

un puntatore ad un array di interi v
una lista src di lunghezza l
un intero 0<= num<l

restituisca

come valore di ritorno la lunghezza della lista (0 se la lista è vuota)
allochi in v un array di lunghezza l (impostare l'array a NULL se la list è vuota).

I valori di v, devono essere tali che

i primi num elementi di v siano gli ultimi num elementi di src
i successivi l-num elementi di v siano i primi l-num elementi di src

Esempio
sia src la seguente sequenza
1 2 3 4 5 6 7
Invocando:
int* v;
int l = rotateList(&v, src, 2);
produce in v seguente risultato:
6 7 1 2 3 4 5
e ritorna 7 (la lunghezza della lista).

Questo è il mio codice:

int len_lista(TipoSCL src){ //restutuisce lunghezza lista
if(src==NULL)
return 0;
else
return 1+len_lista(src->next);
}

int rotateList(int** v, TipoSCL src, int num) {
int l=len_lista(src);
int** v = (int**) malloc(sizeof(int*)*(l)); //allloco array lungo l

for (int i=0; i<num; i++){

//come faccio a selezionare gli ultimi num elementi della lista?
v=???

}

return l;
}

Il problema è: come faccio a selezionare gli ultimi [I]num elementi della lista?

Grazie.

Maxco93
01-09-2016, 07:02
int main()
{
int v[7] = {1,2,3,4,5,6,7};
int r[7];
int num = 2;
for(int i = 7-num; i < 7; i++){
printf("%d\n",v[i]);
}
printf("Il resto del vettore:\n");
for(int i = 0; i < 7-num; i++){
printf("%d\n",v[i]);
}

return 0;
}

Guarda ti ho fatto la semi soluzione al volo. Se hai problemi scrivi pure.