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

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&gt;&lt;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;
}