- Na lista simplesmente encadeada recursiva, implemente o método de remover o último elemento da lista.
public class RecursiveSingleLinkedListImpl<T> implements LinkedList<T> {
protected T data;
protected RecursiveSingleLinkedListImpl<T> next;
public RecursiveSingleLinkedListImpl() { }
public void removeLast(){
}
}
public class RecursiveSingleLinkedListImpl<T> implements LinkedList<T> {
protected T data;
protected RecursiveSingleLinkedListImpl<T> next;
public RecursiveSingleLinkedListImpl() { }
public void removeLast(){
}
}
Passo 1
O enunciado pede para implementar, de forma recursiva, o método
removeLast
que exclui o último elemento de uma lista simplesmente encadeada. Aqui usamos a convenção de que uma lista “vazia” tem data == null
. Vamos precisar identificar três casos: lista vazia, lista com um único elemento e lista com dois ou mais elementos.Passo 2
Tratar o caso em que a lista já está vazia. Se
data == null
, não há nada a remover, então simplesmente retornamos sem fazer nada.Passo 3
Tratar o caso em que há só um elemento na lista. Isso ocorre quando
data != null
(lista não vazia) e next == null
ou next.data == null
(não há outro elemento válido após este). Nesse caso, basta “esvaziar” este nó, atribuindo data = null
e next = null
.Passo 4
Tratar o caso geral com dois ou mais elementos. Se chegamos aqui, significa que existe pelo menos um próximo nó com valor. Então delegamos a remoção do último elemento para a sublista começando em
next
, chamando next.removeLast()
recursivamente.Passo 5
Implementar o método conforme o descrito:
public void removeLast() {
// 1) lista vazia: nada a fazer
if (this.data \(==\) null) {
return;
}
// 2) único elemento: esvazia este nó
if (this.next \(==\) null || this.next.data \(==\) null) {
this.data = null;
this.next = null;
return;
}
// 3) dois ou mais elementos: remove recursivamente na sublista
this.next.removeLast();
}
Resposta
public void removeLast() {
if (this.data \(==\) null) {
return;
}
if (this.next \(==\) null || this.next.data \(==\) null) {
this.data = null;
this.next = null;
return;
}
this.next.removeLast();
}