PDA

Visualizza la versione completa : [C] Lista di interi e scambio posto


Trusty
11-07-2005, 14:24
Ciao a tutti, io ho una lista di interi e con una procedura devo scambiare l'elemento che occupa l'ultimo posto con il primo!

Questo che ho appena scritto il testo dell'esercizio .
Chi mi aiuta?


:ciauz: :ciauz:

Trusty
11-07-2005, 15:17
uppino?

{Bl4d3}
11-07-2005, 15:19
typedef struct nodo *lista;
struct nodo {
int val;
lista next;
}

lista scambia(lista l)
{
lista p = l;
int aus;
while (p->next != NULL)
p = p->next;
aus = l->val;;
l->val = p->val;
p->val = aus;
return l;
}

La funzione ritorna un tipo lista.
La chiamata della funzione deve essere:

L = scambia(L);

quindi L va sia come parametro che come variabile a cui assegnare il valore di ritorno!

Trusty
11-07-2005, 16:24
ma io non devo scambiare....devo portare in cima alla lista l'ultimo nodo e l'"ex" primo nodo non so dove metterlo (il testo dell'esercizio non lo specifica).

Avevo pensato di:
1-salvare in un puntatore l'indirizzo del 1 elem della lista
2-scorrere la lista finch nn ho trovato il penultimo elemento
3-salvare in un puntatore l'ultimo elemento
4-far puntare a NULL il penultimo elemento
5-mettere l'ultimo elemento nel primo

ho pensato bene? :ciauz: :ciauz:

{Bl4d3}
11-07-2005, 17:04
mi fai vedere la traccia?

ma mettere l'ultimo elemento nel primo intendi cambiare il puntatore di testa della lista (esatto!) o mettere il valore nel primo (sbagliato xk si modifica anke il contenuto del puntatore d'appoggio per la testa).

se fai vedere il testo dell'esercizio forse posso aiutarti meglio...

Trusty
11-07-2005, 17:08
ecco, adesso te lo scrivo:

Definire una procedura LastFirst che, data una semplice lista di interi, porta in prima posizione l'ultimo elemento.


Ti ho descritto il testo dell'esercizio.
Ma.....allora devo solo cambiare l'informazione oppure che altro?

LeleFT
11-07-2005, 17:10
Io credo che l'esercizio voglia questo:


Lista attuale: 1 --> 2 --> 3 --> 4

Lista elaborata: 4 --> 1 --> 2 --> 3

Ciao. :ciauz:

Trusty
11-07-2005, 17:13
anche io credo che voglia proprio quello....ma come faccio?
devo usare 2 puntatori?

LeleFT
11-07-2005, 17:17
Dipende dal tipo di lista che hai.
Se hai una semplice Linked-List, sufficiente che tu imposti a null il puntatore next del penultimo elemento, che imposti il puntatore next dell'ultimo in modo che vada a puntare al primo elemento e che imposti il puntatore al primo elemento in modo che punti all'ultimo.

Se hai una Double-Linked-List le cose si complicano un pochino, ma non di molto.


Ciao. :ciauz:

Trusty
11-07-2005, 17:29
io ho una normale lista di interi.....!

adesso vi faccio vedere il codice:

void lastfirst(Listaint p){
int *punt;
int *punt1;
punt=(p->inf); //puntatore al primo elemento della lista
punt1=NULL; //puntatore all'ultimo elemento
while (p->next->next!=NULL){
p=p->next;
punt1=&(p->next->inf); // punt1 = ultimo elemento
p->next=NULL; //il penultimo elemento punta a NULL

}
}

e poi mi manca un pezzo......

Loading