Estou começando a aprender lista encadeada com java… ja fiz em C, agora tenho que fazer Orientada a objeto… falta implementar algumas coisas ainda e conferir a lógica em algumas parte…
keria uma sugestão ali onde tem um comentario antes do laço while
e saber o q eu to fazendo de errado que ele ta um erro de Cast, quando executo…
e se a idéia de classe abstrata ta certa… nao sei se as duas classes prefisavam serem abstratas…
public class Main {
public static void main(String[] args) {
Dados dado = new Dados(15);
List<Dados> lista= new List<Dados>();
lista.insert(dado);
System.out.println(lista.getfirstNode().getNumero());
}
}
public class List <X> {
private ListNode firstNode;
private ListNode lastNode;
private ListNode actualNode;
private ListNode prevNode;
public List(){
firstNode = lastNode = null;
}
public boolean comparator(){
return false;
}
public X getfirstNode(){
return (X)firstNode;
}
public void insert(X insertObject){
if(isEmpty()) {
firstNode = prevNode = new ListNode<X>((Object) insertObject, null, null);
}
else {
ListNode<X> insertItem = new ListNode<X>((Object) insertObject);
actualNode = firstNode;
/* aqui nao sei bem o que vou fazer... kero fazer algo pra quem fizer a lista implementar
algum criterio de ordenação*/
while(comparator()){
prevNode = actualNode;
actualNode = firstNode.getNext();
}
if(actualNode.getPrev()==null){ //se estiver no fim da lista
insertItem.setNext(null);
insertItem.setPrev(actualNode);
actualNode.setPrev(insertItem);
}
else if(actualNode.getPrev() == null){ // se estiver no começo
insertItem.setPrev(null);
insertItem.setNext(actualNode);
actualNode.setPrev(insertItem);
}
else {
insertItem.setPrev(actualNode);
insertItem.setPrev(prevNode);
prevNode.setNext(insertItem);
actualNode.setNext(insertItem);
}
}
}
public boolean isEmpty() {
return firstNode == null;
}
}
public class ListNode <X> {
Object data;
ListNode next;
ListNode prev;
public ListNode(Object object, ListNode next, ListNode prev) {
this.next = next;
this.prev = prev;
data = object;
}
public ListNode(Object object){
data = object;
}
public Object getObject(){
return this.data;
}
public ListNode getNode(){
return this;
}
public void setNext(ListNode next){
this.next = next;
}
public void setPrev(ListNode prev){
this.next = prev;
}
public ListNode getNext(){
return this.next;
}
public ListNode getPrev(){
return this.prev;
}
public Object getDado(){
return (X)this.data;
}
}
public class Dados {
private int numero;
public Dados(int i){
this.numero = i;
}
public int getNumero(){
return this.numero;
}
}