Lista encadeada - Inverter lista [RESOLVIDO]

1. Lista encadeada - Inverter lista [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 13/04/2011 - 03:03h

Não estou conseguindo inverter uma lista encadeada

Segue o que tentei fazer

http://pastebin.com/Ba7dqkuq


  


2. MELHOR RESPOSTA

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 13/04/2011 - 09:13h

Olá,

http://pastebin.com/Ac3dMtgz

Esse é o codigo que fiz. Segue a explicação.

Mudei apenas 2 coisas nele:
1. coloquei um #define no inicio para padronizar o malloc() de listas, assim:

#define MALLOC(a) (a*)malloc(sizeof(a))

Ou seja, para alocar um nódulo novo da lista, basta fazer:

Lista *novo = MALLOC(Lista);

2. A função 'inversao()'.

Essa função foi escrita para o tipo de lista que ESTE programa está implementando, ou seja, uma lista que todo novo elemento é inserido no COMEÇO da lista. Assim:

Inserir(1).
Lista: 1

Inserir(2).
Lista: 2 1

Inserir(0)
Lista: 0 2 1

Para inverter a lista, basta imprimir os valores na ordem, com um loop simples, e criar uma nova lista para conter esses valores, assim:

Lista *inversao( Lista *l) {

Lista *nova = lista_cria();
Lista *p;

for ( p = l; p; p = p->prox )
nova = lista_insere(nova, p->info);
return nova;
}

Espero ter ajudado,
Qualquer dúvida é só postar denovo,
Enzo Ferber
[]'s


3. Re: Lista encadeada - Inverter lista [RESOLVIDO]

César...
cesar

(usa CentOS)

Enviado em 13/04/2011 - 08:07h

Já fiz isto uma vez, mas agora eu não me lembro como é exatamente, olhando seu código dá pra perceber que sua lista esta imprimindo na ordem normal, você teria que fazer o inverso.

Acredito que você terá sua resposta em breve, já que o VOL possui vários membros com conhecimentos em linguagem C.


4. Re: Lista encadeada - Inverter lista [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 13/04/2011 - 09:16h

E mais uma coisa,

Por padrões de boa prática de programação, sempre declare main() como int, e sempre faça-a retornar um valor, ZERO é sucerro, diferente disso é falha.

Ou:

int main ( void ) {
if ( error ) { return EXIT_FAILURE; }
return EXIT_SUCCESS;
}

Que são os padrões do kernel do linux. Para usar essas macros você precisa incluir stdlib.h e unistd.h (acho eu..)

No seu programa, o que você altera na função main() é a parte de inverter a lista, que ficou assim:
Lista *invertida = inversao(l);

Enzo Ferber
[]'s


5. Re: Lista encadeada - Inverter lista [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 13/04/2011 - 10:58h

EnzoFerber

Obrigado pela ajuda.

Consegui entender o seu código

Tópico resolvido


6. codpad.org

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 13/04/2011 - 11:08h

Oi Gustavo,

Apenas uma dica. Da próxima vez que precisar mostrar algum código, utilize um serviço apropriado, eu gosto do codepad.org:

http://codepad.org/

Copiei o seu paste inicial e nem sequer compilou:

http://codepad.org/J7isWlt2

Abraço!


7. Júlio

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 13/04/2011 - 11:33h

Mais ele utilizou.... oO
O pastebin...

=D


8. O pastebin não é apropriado para códigos

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 13/04/2011 - 11:38h

Oi Enzo,

O pastebin não compila e nem mostra a saída, o codpad sim. ;-)

Abraço!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts