Created
February 27, 2019 09:38
-
-
Save rodrigovilar/b49628ac4d9d2a793cd94217fa13c0ce to your computer and use it in GitHub Desktop.
Lista duplamente encadeada circular
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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