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;
}