reverse list em C!

pmcosta

Membro
Boa noite,

estou a tentar implementar uma função que me "reverta" a ordem de um struc:
struct item { // item é o nome pelo qual é conhecida no compilador a estrutura
int value; // Declaração de variáveis da estruturas: int value
struct item *next; // apontador para o proximno valor da estrutura
};
typedef struct item element;
estou a usar :
void ReverseLinkeList(element** pList)
{
element * ptr,*pre = 0, *next;
ptr = *pList;
next = ptr->next;
while(ptr->next)
{
ptr-> next = pre;
pre = ptr;
ptr = next;
next = next-> next;
}
*pList = ptr;
}
mas a lista fica só com o primeiro valor (o ultimo da lista original...

Alguém me pode ajudar?
 
Pelo que entendi do teu código, falha logo no primeiro ciclo, tu dizes que "segue" enquanto houver ptr->next, mas dentro do ciclo estás a alterar o conteúdo do ptr->next..., quando voltas ao while já não tens o ptr->next que esperavas encontrar.

A sugestão que te faço é no while em vez de andares a percorrer o ptr, percorreres o pList. E definires o ptr como uma lista vazia.

Mesmo assim estou na dúvida se funcionará..., não analisei bem o teu código.
 
quando volto ao while tenho o valor que esperava encontrar.
adicionando a linha
printf("adicionado %i\n", ptr->value);
no inicio do ciclo obtenho os valores por ordem na consola.
excluindo o ultimo que é o que fica.
Podes-me ajudar?
 
O problema é que tu só tens apontadores para a frente.
Um possivel algoritmo é o seguinte:

1- fazer uma cópia da lista.
2- percorreres a lista até ao último elemento guardando o penúltimo endereço do next
3- quando chegares ao último colocas o valor encontrado na posição i da lista de retorno e colocas o apontador do penúltimo para null
4- volta ao ponto 2 até a lista só conter um elemento
5- copia esse valor para a última posição da cópia e retorna

Espero que tenhas percebido, agora não tenho aqui nenhum compilador de C para fazer e experimentar o código.
 
Bom tenho aula amanhã e pergunto ao professor.
O trabalho já seguiu incompleto.
Obrigado pelas ajudas.
 
Última edição:
Back
Topo