Lista encadeada circular em Java

0 respostas
listjava
cleost

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));
	}

}

}

Criado 25 de setembro de 2017
Respostas 0
Participantes 1