- 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);
}
}
}
// 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ímosnewNode.data = this.data;
newNode.setNext(this.getNext());
Agora para engatar o
element
no nó atual e deslocar o restante da lista para newNode
, devemos:- Atualizar o
data
do nó atual paraelement
. - Fazer o
next
do nó atual apontar paranewNode
.
Resposta
MISSING CODE 1:
this.data = element;
MISSING CODE 2:
this.next = newNode;