Olá amigos,
esu estou com uma duvida que me tirou o sono esta noite e gostaria de saber se voces podem me ajudar a resolver mais este problema.
Bom, eu tenho um metodo que le os numeros de um arquivo e vai guardando este numeros em uma lista encadeada em ordem descrescente. Esse método se chama insere. O método insere solicita que seja passado um nó da lista para que ele funcione.
Esse método insere está funcionando normalmente. Em um determinado momento da vida, eu quero que essa lista seja clonada, e para isso criei um método que se chama clone e esse metodo exige que seja passado uma lista para que ele possa cloná-la. Pois bem, a primeira posiçao ele clona perfeitamente e insere (atraves do metodo insere) na lista clonada, mas feito isso, ele meio que esvazia a primeira lista e eu nao consigo mais. Isso só acontece quando eu mando inserir. Se eu mandar percorrer a lista que foi passada na chamada de método ele percorre normalmente, mas quando eu chamo o método insere… já era… e ele entra em looping tb.
Por favor deem uma olhada nos dois métodos:
public Lista clone(Lista teste){
Lista aux = new Lista();
NodeBI m = teste.sentinela.next;
while (m!=sentinela){
m=m.next;
aux.insere(m);
}
return aux;
}
// insere os valores ordenados em uma lista
private void insere(NodeBI novo){
if (isEmpty()){ // se a lista estiver vazia, coloque depois do sentinela
sentinela.next=novo;
sentinela.prev=novo;
novo.prev=sentinela;
novo.next=sentinela;
contNodos=contNodos.add(um);//incrementa contNodos
}
else {
NodeBI p = sentinela; // cria node p e iguala ao sentinela
while (p.next!=sentinela && novo.valor.compareTo(p.next.valor)<0) // enquanto o p.next for diferente de sentinela e valor de novo for menor do que valor de p
p=p.next;
p.next.prev=novo;
novo.next=p.next;
p.next=novo;
novo.prev=p;
contNodos=contNodos.add(um);//incrementa contNodos
} // fim do while
}// fim do metodo insere
Por favor, me ajudem!