Olá, acho meio estranho tentar explicar meu problema porque não pretendia mostrar muitas coisas do meu código, mas aqui vai:
Estava tentando implementar alguns códigos de Lista Ligada (ou Encadeada, como achei em alguns lugares), mas não obtive sucesso. Geralmente alguns números se perdem no meio da ordenação, suas referencias somem em algum ponto. Aqui está o código que eu achei necessário mostrar, se precisar de mais partes do código me avisem.
[code]static No mergesort(No c) {
if (c == null || c.prox() == null) {
return c;
}
No a = c, b = c.prox();
while ((b != null) && (b.prox() != null)) {
c = c.prox();
b = (b.prox()).prox();
}
b = c.prox();
c.mudaProx(null);
return merge(mergesort(a), mergesort(b));
}
static No merge(No a, No b) {
No dummy = new No(0);
No head = dummy, c = head;
while ((a != null) && (b != null)) {
if (a.valor() < b.valor()) {
c.mudaProx(a);
c = a;
a = a.prox();
} else {
c.mudaProx(b);
c = b;
b = b.prox();
}
}
if (a == null) {
c.mudaProx(b);
} else {
c.mudaProx(a);
}
return head.prox();
}[/code]
Chamo esse algoritmo usando mergesort(num), aonde num é o inicio da minha lista ligada.
Gostaria de uma ajuda, pois já perdi boa parte da minha madrugada tentando entender porque os números se perdem.
Abraços.
PS: Se alguém puder me explicar essa parte do código:
No dummy = new No(0);
No head = dummy, c = head;
Eu ficaria muito agradecido, única parte que não entendi. Por que criar um novo nó e ir criando diversos nós iguais a ele?