1. Observe os comentarios e o código abaixo e assinale a alternativa que preencheria corretamente os trechos //MISSING CODE 1 e //MISSING CODE 2, respectivamente, para o método funcionar corretamente.
// A classe AscendingOrderedRecursiveLinkedListFullImpl estende
// RecursiveLinkedListImpl e representa uma lista ordenada que usa
// um comparator interno (atributo).
@Override
public void insert(T element) {
    if(isEmpty()){
        this.data = element;
        this.next = new AscendingOrderedRecursiveLinkedListFullImpl<T>(this.comparator);
    }else{
        if(comparator.compare(this.data, element) > 0){ //if data is greater
            AscendingOrderedRecursiveLinkedListFullImpl<T> newNode =
                new AscendingOrderedRecursiveLinkedListFullImpl<T>(this.comparator);
            newNode.data = this.data;
            newNode.setNext(this.getNext());
            //MISSING CODE 1
            //MISSING CODE 2
        }else { //if data is less or equal than the element
            this.next.insert(element);
        }
    }
}

Passo 1

O enunciado pede para completar o método insert(T element) de uma lista ligada recursiva ordenada em ordem crescente, que usa um Comparator<T> interno. Já temos o caso de lista vazia e o caso recursivo “normal” (quando o novo elemento deve ficar depois). Falta tratar o caso em que o elemento a inserir é menor que o data do nó atual: nesse ramo copiamos o conteúdo atual para um novo nó (newNode) e precisamos “inserir” o element na posição do nó atual, ajustando data e o ponteiro next.

Passo 2

Dentro do if (comparator.compare(this.data, element) > 0) já criamos newNode, atribuímos
newNode.data = this.data;
newNode.setNext(this.getNext());
Agora para engatar o element no nó atual e deslocar o restante da lista para newNode, devemos:
  1. Atualizar o data do nó atual para element.
  2. Fazer o next do nó atual apontar para newNode.

Resposta

MISSING CODE 1:
this.data = element;
MISSING CODE 2:
this.next = newNode;

Exercícios relacionados