Ajuda em função de trocar ponteiros de lista por indice em C

5 respostas
L

Fala galera,

to torrando a cabeça aqui e não ta saindo nada..

seguinte,

tenho uma função que recebe 2 indices e troca os mesmo de lugares

por exemplo eu tenho uma lista assim:

1 2 3 4 5

e quero trocar os elemento de nº 1 com 3

ficaria assim

3 2 1 4 5

o problema é que na hora da troca eu estou removendo os 2 valores! a função prototipo é:
int trocar (**no lista, int indice1, int indice2)
alguem tem alguma dica?

eu sei que tenho que fazer os seguintes testes:

if( indice1<indice2){
if(indice1==1)//primeiro elemento da lista
{
trocar elementos
}
else{
trocar elementos
}

}
if( indice2><indice1){
if(indice2==1)//primeiro elemento da lista
{
trocar elementos
}
else{
trocar elementos
}
acho que to fazendo confusão com os ponteiros

eu sei que no primeiro caso eu posso criar um aux =*lista;
e fazer o que o elemento de indice1 = indice2->prox;
e vice e versa.. mas acho que to colocando algo errado no meio..

Desculpe se foi confuso, mas desde já agradeço

5 Respostas

J

posso estar errado na questão da sintaxe, mas a sua lista é uma matriz de nós?

ser for um vetor de no

bidimensional

O erro pode estar na sintaxe, mas eu não sei se declarar **no lista pode dar algum problema ou não, porque na linguagem c você pode flexionar bem a sintaxe.

L

A lista é uma estrutura do tipo:

struct *no{
           int dado;
           no * prox;

};

Eu aloco os no dinamicamente,

a minha duvida é como faço para trocar os nós!

to quebrando a cabeça aqui, caso consiga eu posto

J

amigo,

coloca o código completo ai que tentamos ver o que ta errado…
Esta um pouco confuso… ou você esta pedindo para fazer o algoritmo?

ABS

L
jmmenezes:
amigo,

coloca o código completo ai que tentamos ver o que ta errado....
Esta um pouco confuso... ou você esta pedindo para fazer o algoritmo?

ABS
int trocar (no **l, int posicao1, int posicao2)
{   no *aux =*l;
    no *aux2 =*l;
    no* ant;
    no* ant2;
    int contador=1;
    if (posicao1 == posicao2)
       return 0;
    if (posicao1 <posicao2 && posicao1 ==1){
                             
                 while((aux2!=NULL) && contador<posicao2){
                                 ant2 = aux2;
                                 aux2 =aux2->prox;
                                  contador++;
                                  }
                   aux->prox = aux2->prox;
                   aux2->prox = ant2;
                   ant2->prox= aux;               
                               }          
      else{
           
           
           }                            
                                  
                                  
                          
                 
    if (posicao1>posicao2){
                           
                           }               
}
Aquela hora eu tava no trabalho e nao tinha o codigo em "maos" eu quero só que corrijam essa parte
aux->prox = aux2->prox;
aux2->prox = ant2;
ant2->prox= aux;
M
lusfilip:
jmmenezes:
amigo,

coloca o código completo ai que tentamos ver o que ta errado....
Esta um pouco confuso... ou você esta pedindo para fazer o algoritmo?

ABS
int trocar (no **l, int posicao1, int posicao2)
{   no *aux =*l;
    no *aux2 =*l;
    no* ant;
    no* ant2;
    int contador=1;
    if (posicao1 == posicao2)
       return 0;
    if (posicao1 <posicao2 && posicao1 ==1){
                             
                 while((aux2!=NULL) && contador<posicao2){
                                 ant2 = aux2;
                                 aux2 =aux2->prox;
                                  contador++;
                                  }
                   aux->prox = aux2->prox;
                   aux2->prox = ant2;
                   ant2->prox= aux;               
                               }          
      else{
           
           
           }                            
                                  
                                  
                          
                 
    if (posicao1>posicao2){
                           
                           }               
}
Aquela hora eu tava no trabalho e nao tinha o codigo em "maos" eu quero só que corrijam essa parte
aux->prox = aux2->prox;
aux2->prox = ant2;
ant2->prox= aux;
Faz assim cara:
void trocar (no **l, int posicao1, int posicao2)
{
    no *aux = 0;
    aux = *(l + posicao1);
    *(l + posicao1) = *(l + posicao2);
    *(l + posicao2) = aux;
}
Criado 25 de abril de 2012
Ultima resposta 27 de abr. de 2012
Respostas 5
Participantes 4