Codigo de para pegar o maior numero bugado?

Criei o codigo que esta na imagem para percorrer uma lista duplamente encadeada e pegar o maior token(numero do No), e enviei a seguinte entrada(add no fim) : 12, 17, 14, 23, 8, 10. Deveria ser removido 23 e quando chamasse novamente o metodo removeria 17, mas esta removendo 10 e 23. O que ha de errado?Eh bug? ou erro meu?

Não da pra ter certeza da resposta pois vc não postou o código inteiro.
Assim, o ideal seria postar a codificação completa, preferencialmente escrita para copiar e rodar na IDE, pois da menos trabalho para debugar lá.

Então, posso estar errado, na construção a seguir, mas pelo menos vou tentar.

quando você declara que:
No aux = inicio; //linha 24
No maior = inicio;//linha 25
A alteração que fizer em aux será feita em maior por causa dos ponteiros e vice versa.
Ao final da execução se remover todos os números da variável maior também terá removido indiretamento os da variável auxiliar;
Isto ocorre por que os ponteiros estarão apontando para o mesmo endereço de memória, lembre a variável guarda algo e este algo tem um endereço na memória.

    Então quando declara os números 12,17,14,23,8,10 e vc faz:
    auxiliar.getProx() na linha 27; -> vc aponta para o 12 tanto na variável maior quanto na auxiliar
    auxiliar.getProx() na linha 28; -> vc aponta para o 17 sem antes comparar o 12 em ambas as variáveis
    Na linha 37 tem outro gexProx(): só que com a variável início,
    em inicio.getProx() então voce acaba apontando para outro número
    
    provavelmente a variável fim = inicio, logo o ponteiro marca o mesmo endereço de memória
    assim quando você faz fim.getProx() = null, é o mesmo que fazer inicio.getProx() = null;
    Ai, quando o método for reexecutado, o while não vai até o final do array obrigatóriamente,
    ele vai achar o primeiro null e não vai comparar o resto.
    
    Resumo: o código não está bugado ele fez o que você programou mas não o que você quer.

Codificação alternativa mantendo a didática proposta:

package crisis;

import java.util.ArrayList;
import java.util.Collections;
//classe principal
public class Crisis {

public static void main(String[] args) {
    ArrayList<Integer> numeros = new ArrayList<>();
    Collections.addAll(numeros, 12,17,14,23,8,10);
    Num num = new Num(numeros);
    num.ordene();
    System.out.println("A variável num foi reordenada? "+!num.getNumeros().isEmpty()+"\n"+num.getNumeros());        
}

}
//classe Num

package crisis;

import java.util.ArrayList;

public class Num {

private ArrayList<Integer> numeros = new ArrayList<>();
private int cont;

//a variável cont e será inicializado com 0 ao criar uma instância desta classe
Num(ArrayList<Integer> numeros) {
    this.numeros = numeros;
}

//traz o próximo numero inteiro ou null quando o limite do array é atingido
Integer getNext() {
    if (cont < numeros.size()) {
        return numeros.get(cont++);//o incremento acontece na próxima linha
    } else {
        return null;
    }
}

//zera o contador e retorna null ou o valor da variável numeros na posição 0
public Integer getPos0() {
    cont = 0;
    return numeros.isEmpty() ? null : numeros.get(0);
}

public int getCont() {
    return cont;
}

public ArrayList<Integer> getNumeros() {
    return numeros;
}

public void ordene() {
    Num numDeSaida = new Num(new ArrayList<>());//esta instância vai guardar os números se procura
    Integer aux, teste;
    System.out.println("Valores a ordenar: " + this.getNumeros());
    //este while tem a função de percorrer todos os valores do array
    while (this.numeros.size() > 0) {
        aux = this.getPos0();//atribuindo o valor na primeira posição do array à variavel aux
        //este while tem a função de identificar o maior número informado
        while (true) {
            if ((teste = this.getNext()) != null) {
                aux = aux > teste ? aux : teste;
            }
            if (this.getCont() == this.numeros.size()) {
                break;
            }
        }
        numDeSaida.getNumeros().add(aux);//adicionando o maior número em outra variável do tipo Num
        this.getNumeros().remove(aux);//é melhor remover o objeto do que o declarar como null pois da menos trabalho pra comparar           
    }
    System.out.println("Valores ordenados: " + numDeSaida.getNumeros()
            + "\nA variável num está sem \"números\"? -> | " + this.getNumeros().isEmpty() + " | \nFim da Codificação");
    this.numeros = numDeSaida.getNumeros();//se não for assim this fica com o array vazio
}

}

Obrigado pelas respostas, mas encontrei o erro: o problema era que eu estava comparando sempre o i e o i + 1 e fazendoa variavel maior receber o valor dessa comparação. Sendo que o certo era fazer maior = i, depois comparar maior com i, i + 1, i + n, ou seja,
if(maior.getToken < aux.getProx().getToken()) {
maior = aux.getProx();
}
aux = aux.getProx();