Implementar uma lista encadeada circular em Java?
Soluções para a tarefa
Java é uma linguagem de programação muito completa e amplamente utilizada, apesar de não ter uma sintaxe tão facilmente compreendida com Python, que também é orientada a objetos.
Quando montamos uma lista circular em java, não iremos lidar com alguns nós, como o primeiro e o ultimo. O mesmo acontece com as listas simplesmente encadeadas e as listas duplamente encadeadas. Assim, utilizaremos sentinelas de cabeçalho e de rodapé, porém, como trata-se de uma lista circular o último elemento possui como próximo o primeiro elemento.
Portanto, para percorrermos uma lista circular precisamos definir um tipo de cursor, que é um nó (elemento) corrente na lista. Isso pode ser melhor observado no código abaixo, nele a estrutura de dados já está definida.
public class CircleList {
private Node cursor;
private int size;
public CircleList() {
cursor = null;
size = 0;
}
public int size() {
return size;
}
public Node getCursor() {
return cursor;
}
public void advance() {
cursor = cursor.getNext();
}
public void add(Node v) {
if (cursor == null) {
v.setNext(v);
cursor = v;
} else {
v.setNext(cursor.getNext());
cursor.setNext(v);
}
size++;
}
public Node remove() throws IllegalArgumentException {
if (cursor == null)
throw new IllegalArgumentException("lista vazia");
Node aux = cursor.getNext();
if (aux == cursor)
cursor = null;
else {
cursor.setNext(aux.getNext());
aux.setNext(null);
}
size--;
return aux;
}
}
Espero ter ajudado, bons estudos :)