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 é:
alguem tem alguma dica?
eu sei que tenho que fazer os seguintes testes:
[code]if( indice1<indice2){
if(indice1==1)//primeiro elemento da lista
{
trocar elementos
}
else{
trocar elementos
}
}[/code]
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
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          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.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          A lista é uma estrutura do tipo:
[code]struct *no{
int dado;
no * prox;
};[/code]
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
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          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
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=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[/quote]
[code]
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){
                       
                       }               
} [/code]
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;  
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=lusfilip][quote=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[/quote]
 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){
                           
                           }               
} [/code]
Aquela hora eu tava no trabalho e nao tinha o codigo em "maos"
eu quero só que corrijam essa parte
[code] aux->prox = aux2->prox;
aux2->prox = ant2;
ant2->prox= aux;  [/code][/quote]
Faz assim cara:
[code]void trocar (no **l, int posicao1, int posicao2)
{
    no *aux = 0;
    aux = *(l + posicao1);
    *(l + posicao1) = *(l + posicao2);
    *(l + posicao2) = aux;
}