Estou programando uma lista encadeada ordenada em java, mas estou com bastante dificuldade. O codigo que implementei aparentemente esta correto na semantica, mas durante o metodo add() recebo um erro dizendo que o operador “>” nao pode ser utilizado no meu retorno do metodo getValue(). Ja tentei fazer cast do retorno pro tipo (int) mas recebi erro do java do tipo java.lang.NullPointerException.
Alguem pode me dar uma ajuda nesse problema? Segue o codigo.
public class LinkedListOrdenada implements List {
private Node list;
private Nodeultimo;
public LinkedListOrdenada() {
this.list = null;
this.ultimo = null;
}
@Override
public void add(Object obj) {
Node<T> node = new Node();
if(list == null) {
list = node;
ultimo = node;
}else {
if(node.getValue() > list.getValue() {
node.setNext(list);
list = node;
}else {
if(node.getValue() > ultimo.getValue(){
ultimo.setNext(node);
node.setNext(null);
ultimo = node;
}else {
Node<T>aux = list;
while(aux != null){
if(node.getValue() > aux.getValue()){
node.setNext(aux.getNext());
aux.setNext(node);
break;
}
aux =aux.getNext();
}
}
}
}
}
@Override
public void set(int position, Object obj) {
//
}
@Override
public void remove(Object obj) {
Node<T> node = list;
if(node.getValue().equals(obj)){
list = node.getNext();
node.setNext(null);
} else {
while(node.getNext() != null){
if(node.getNext().getValue().equals(obj)){
break;
}
node = node.getNext();
}
Node aux = node.getNext();
node.setNext(aux.getNext());
aux.setNext(null);
}
}
@Override
public void remove(int position) {
Node<T> node = list;
int i = 0;
if(position == 0){
list = node.getNext();
node.setNext(null);
}else{
while(node.getNext()!= null) {
if(i == position) {
break;
}
i++;
node = node.getNext();
}
Node aux = node.getNext();
node.setNext(aux.getNext());
aux.setNext(null);
}
}
@Override
public Object get(int position) {
Node<T> node = list;
int i = 0;
while(node != null) {
if(i == position) {
break;
}
i++;
node = node.getNext();
}
return node.getValue();
}
@Override
public Object first() {
if(list!= null) {
return (T) list.getValue();
}
return null;
}
@Override
public Object last() {
Node<T> node = list;
if(node.getNext()==null) {
return (T)node.getValue();
}else {
while(node.getNext()!=null) {
node = node.getNext();
}
return (T) node.getValue();
}
}
@Override
public boolean isEmpty() {
if(list == null)
return true;
else
return false;
}
@Override
public boolean contains(Object obj) {
Node<T> node = list;
while(node!= null) {
if(node.getValue().equals(obj)) {
return true;
}
node = node.getNext();
}
return false;
}
public static void main(String[] args) {
List<Double> lista = new LinkedListOrdenada();
//TESTANDO SE A LISTA ESTA VAZIA OU NAO
if(lista.isEmpty())
System.out.println("lista vazia\n");
else
System.out.println("lista nao esta vazia\n");
System.out.println("preenchendo...\n");
//PREENCHENDO A LISTA
lista.add(1.0);
lista.add(6.0);
lista.add(9.0);
lista.add(3.0);
//TESTANDO SE A LISTA ESTA VAZIA DEPOIS DE PREENCHER
if(lista.isEmpty())
System.out.println("lista vazia\n");
else
System.out.println("lista nao esta vazia\n");
System.out.println("\n");
//IMPRIMINDO A LISTA
System.out.println("imprimindo a lista!");
for (int i = 0;i<=4;i++) {
System.out.println("objeto "+i+ ") "+lista.get(i));
}
//REMOVER DA LISTA NA POSICAO
lista.remove(1);
System.out.println("imprimindo a lista depois de remover na posicao 1!");
for (int i = 0;i<=4;i++) {
System.out.println("objeto "+i+ ") "+lista.get(i));
}
System.out.println("\n");
//PRIMEIRO ELEMENTO DA LISTA
System.out.println("Valor do primeiro elemento é : "+lista.first()+"\n");
//LISTA CONTEM VALOR
System.out.println("A lista contem o valor ? "+lista.contains(2.0)+"\n");
//REMOVER ESSE VALOR DA LISTA
lista.remove(3.0);
System.out.println("imprimindo a lista depois de remover o 3.0!");
for (int i = 0;i<=4;i++) {
System.out.println("objeto "+i+ ") "+lista.get(i));
}
//SETANDO ESSE VALOR
System.out.println("\nSetando o valor");
lista.set(2, 8.0);
System.out.println("imprimindo a lista novamente!");
for (int i = 0;i<=4;i++) {
System.out.println("objeto "+i+ ") "+lista.get(i));
}
}
}