Lista Duplamente Encadeada onde os elementos são inseridos sempre em ordem crescente

Olá, estou com o seguinte exercício para resolver. Mas não estou conseguindo:

Escreva uma Lista Duplamente Encadeada onde os elementos são inseridos sempre em ordem crescente (ou seja, o método de add não terá o índice de inserção).

Percorra a lista, do início ao fim e só vá para o próximo elemento se ele for menor que o que será inserido. Quando encontrar um elemento maior ou igual, pare e faça a inserção antes dele.

Respondendo sua pergunta com base na resposta do nosso colega acima. Mesmo o post sendo antigo, fica para os novatos como exemplo:

É uma forma de implementação, não significa que seja a melhor, mais otimizada e mais correta.

class Node {
    public int value;
    public Node prev;
    public Node next;

    public Node(int value) {
        this.value = value;
        this.prev = null;
        this.next = null;
    }
}

class SortedLinkedList {
    private Node head;
    private Node tail;

    public SortedLinkedList() {
        this.head = null;
        this.tail = null;
    }

    public void add(int value) {
        Node newNode = new Node(value);

        // Se a lista estiver vazia, o novo nó será o head e o tail
        if (head == null) {
            head = newNode;
            tail = newNode;
            return;
        }

        // Percorre a lista até encontrar a posição correta para inserir o novo nó
        Node current = head;
        while (current != null && current.value < value) {
            current = current.next;
        }

        // Insere o novo nó na posição correta
        if (current == null) { // Insere no final da lista
            newNode.prev = tail;
            tail.next = newNode;
            tail = newNode;
        } else if (current == head) { // Insere no início da lista
            newNode.next = head;
            head.prev = newNode;
            head = newNode;
        } else { // Insere no meio da lista
            newNode.prev = current.prev;
            newNode.next = current;
            current.prev.next = newNode;
            current.prev = newNode;
        }
    }

    public void printList() {
        Node current = head;
        while (current != null) {
            System.out.print(current.value + " ");
            current = current.next;
        }
        System.out.println();
    }
}