Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - linguaggio c: inversione ordine liste...
Forum - C/C++ - linguaggio c: inversione ordine liste...

Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:37
Mercoledì, 01/07/2009
ciao a tutti!!!
dovrei scrivere una funzione che inverta l'ordine di una lista...

io però sono riuscito a fare solo questo:
http://pastebin.com/m10b92f5

così la lista viene solo visualizzata al contrario...
io ora vorrei invece creare una seconda lista composta dagli elementi della prima però al contrario...
esempio:

lista_1: 1->2->3;
lista_2: 3->2->1;

ho provato un po' però il problema sta nel fatto che non riesco a capire come procedere nella seconda lista... come avevo provato a fare io veniva sempre riscritto il primo elemento...

in attesa di una risposta vi ringrazio anticipatamente...

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 20:11
Mercoledì, 01/07/2009
Non ho visto il codice, ma se il problema è fare una seconda lista di ordine inverso rispoetto alla prima lista. Basta creare una seconda lista e copi dall'ultimo elemento della prima lista nella seconda lista e lo fai fino al primo elemento della prima lista.
O forse non ho capito bene cosa hai bisogno di preciso.

Ultima modifica effettuata da Lawliet il 01/07/2009 alle 20:12
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:16
Giovedì, 02/07/2009
Testo quotato

Postato originariamente da Lawliet:

Non ho visto il codice, ma se il problema è fare una seconda lista di ordine inverso rispoetto alla prima lista. Basta creare una seconda lista e copi dall'ultimo elemento della prima lista nella seconda lista e lo fai fino al primo elemento della prima lista.
O forse non ho capito bene cosa hai bisogno di preciso.



Potrebbe essere un problema se gli elementi hanno un solo puntatore e si vuole avere la seconda lista con la stessa struttura.

Se invece ogni elemento ha due puntatori:

(1)->(2)->(3)
(1)<-(2)<-(3)

allora basta scambiare i puntatori per ogni elemento e scambiare la testa con la coda :D .

Ciao. :k:

Luigi

Ultima modifica effettuata da gigisoft il 02/07/2009 alle 10:18
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 10:29
Giovedì, 02/07/2009
ciao gigisoft!!!

infatti ma il problema è che non posso usare liste bidirezionali...

non so se hai dato un' occhiata al mio codice... in pratica dovrei fare la stessa cosa... io li ho usato la ricorsione... però non per visualizzare solo gli elementi ma per memorizzarli in un'altra lista...

se ti va puoi darmi anche solo qualche suggerimento...
grazie comunque...

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 11:03
Giovedì, 02/07/2009
Prova cosi'
supponendo che la tua lista sia:

(T)->(1)->...->(n)->(C)
Con:
T = Testa;
C = Coda;

provo a scrivertela in pseudocodice, usero':
I per scorrere la lista sorgente;
E per creare ogni nuovo elemento della lista destinazione;
T2 e C2 per la testa e la coda della lista destinazione;

Codice sorgente - presumibilmente Delphi

  1. I = T;
  2. C2 = Null;
  3. While (I <> Null)
  4. Begin
  5.   E = New();
  6.  
  7.   If (C2 = Null) Then
  8.     Begin
  9.       C2 = E;
  10.       C2.Next = Null;
  11.     End
  12.   Else
  13.     E.Next = J;
  14.  
  15.   T2 = E;
  16.   I = I.Next;
  17. End;



Dovrebbe furnzionare.

Ciao. :k:

Luigi

Ultima modifica effettuata da gigisoft il 02/07/2009 alle 11:05
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 12:10
Giovedì, 02/07/2009
niente da fare... non riesco LOL...

grazie a tutti comunque...

a furia di sbatterci la testa troverò una soluzione...:asd:

PM Quote