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.
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.