Skip to content

Instantly share code, notes, and snippets.

@rodrigovilar
Created February 27, 2019 09:38
Show Gist options
  • Save rodrigovilar/b49628ac4d9d2a793cd94217fa13c0ce to your computer and use it in GitHub Desktop.
Save rodrigovilar/b49628ac4d9d2a793cd94217fa13c0ce to your computer and use it in GitHub Desktop.
Lista duplamente encadeada circular
public class ListaNetflix {
private Node inicio;
public void add(Object x) {
Node novo = new Node();
novo.setValor(x);
if (inicio == null) {
inicio = novo;
inicio.setAnterior(novo);
inicio.setProximo(novo);
} else {
inicio.getAnterior().setProximo(novo);
novo.setAnterior(inicio.getAnterior());
inicio.setAnterior(novo);
novo.setProximo(inicio);
}
}
public Node getInicio() {
return inicio;
}
}
/**
* Estrutura para representar um nó de uma lista encadeada.
* Possui uma referência para o valor que armazena, outra para
* o próximo nó da lista encadeada e outra para o nó anterior
* na lista encadeada.
*
*/
class Node {
private Object valor;
private Node proximo;
private Node anterior;
public Node getAnterior() {
return anterior;
}
public void setAnterior(Node anterior) {
this.anterior = anterior;
}
public Object getValor() {
return valor;
}
public void setValor(Object valor) {
this.valor = valor;
}
public Node getProximo() {
return proximo;
}
public void setProximo(Node proximo) {
this.proximo = proximo;
}
}
import static org.junit.Assert.*;
import org.junit.Test;
public class ListaNetflixTest {
@Test
public void test() {
ListaNetflix lista = new ListaNetflix();
lista.add("EP 1");
lista.add("EP 2");
lista.add("EP 3");
Node inicio = lista.getInicio();
assertEquals("EP 1", inicio.getValor());
assertEquals("EP 2", caminhar(inicio, 1).getValor());
assertEquals("EP 3", caminhar(inicio, 2).getValor());
assertEquals("EP 1", caminhar(inicio, 3).getValor());
assertEquals("EP 3", voltar(inicio, 1).getValor());
assertEquals("EP 2", voltar(inicio, 2).getValor());
assertEquals("EP 1", voltar(inicio, 3).getValor());
assertEquals("EP 3", voltar(inicio, 4).getValor());
}
private Node caminhar(Node node, int n) {
Node resultado = node;
for (int i = 0; i < n; i++) {
resultado = resultado.getProximo();
}
return resultado;
}
private Node voltar(Node node, int n) {
Node resultado = node;
for (int i = 0; i < n; i++) {
resultado = resultado.getAnterior();
}
return resultado;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment