Pascal/Turbo Pascal - Urgente!!!!!! recorrer una lista hacia atras

 
Vista:

Urgente!!!!!! recorrer una lista hacia atras

Publicado por Raymond (20 intervenciones) el 25/02/2001 08:30:53
Nesecito saber como se recorre una lista doble hacia atras, la se recorrer hacia adelante pero no hacia atras.

Nesecito hayda

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Urgente!!!!!! recorrer una lista hacia atras

Publicado por Cris (29 intervenciones) el 25/02/2001 08:54:42
Me imagino que es una lista doblemente ligada (obviamente con punteros), pero no dices si es lineal o circular.
Bueno, cuando tu recorres una lista hacia adelante haces esto no? (suponiendo que es una lista doblemente ligada LINEAL):

type {declaracion de variables}
puntero = ^registro;
registro= record
nombre:string[15];
siguiente:puntero; {apunta al siguiente registro}
anterior:puntero; {apunta al registro anterior}
end;

var punt,list:puntero;

begin
punt=list; {suponiendo que list es el puntero que tienes para manejar el inicio de la lista}
{recorrer hacia adelante e imprimir nombres:}
while(punt<>nil)do {mientras no sea fin de la lista}
begin
write(punt^.nombre);
punt:=punt^.siguiente; {le das a punt la direccion de memoria del siguiente registro}
end;

ahora, para recorrerla hacia atras, suponiendo que estas en el ultimo registro de la lista, haces esto:

{con las mismas variables}

begin
...
{aqui mandas a punt al final, al ultimo registro}
...
while(punt<>nil)do
begin
write(punt^.nombre);
punt:=punt^.anterior; {lo mandas al registro anterior hasta que llegue al inicio de la lista}
end;

para poder mandarlo al final de la lista, simplemente recorre el puntero hasta el final, como en el primer ejemplo que te puse, nada mas sin imprimir el nombre.
Espero que te haya ayudado, si tienes otra duda, o si esta no era tu duda, puedes escribirme.
Saludos
Cristina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente!!!!!! recorrer una lista hacia atras

Publicado por Diego Romero (282 intervenciones) el 25/02/2001 21:06:28
Agregando a la respuesta de Cris. Para el caso de una lista simplemente enlazada necesariamente debes buscar el anterior del nodo que te interesa y debolver un puntero a él. Aqui va una funcion que haría eso.

{Busca el Anterior elemento del elemento pasado como parametro
Nota: el elemento buscado DEBE existir en la lista.}
function buscar_anterior(a:tpuntero):tpuntero;
var
aux:tpuntero; {Este puntero se usará para recorrer la lista}
begin
aux:=primero; {Empezamos desde el primero}
while aux^.sig<>a do {Mientras el puntero al siguiente elemento del alemento
sea distinto al elemento que buscamos...}
begin
aux:=aux^.sig; {... avanzamos en la lista}
end;
buscar_anterior:=aux;
end;
"primero" es un putero global que siempre apunta al primer nodo de la lista, "a" es un puntero al nodo actual, la función devuelve un puntero al nodo anterior a "a".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar