Lista encadeadas

Por favor me ajudem não consigo passar de simplesmente pra duplamente encadeada! la vai o codigo:

public class ListaEnc {


    private Nodo desc_ini, desc_fim;
    private int tamanho;
                
    /*
     * Métodos Fundamentais 
     * 
     */
    public void insereInicio(Object o) {
                Nodo x = new Nodo();
                x.setNo(o);
                x.setProx(desc_ini);
                desc_ini = x;
                if(tamanho == 0)
                            desc_fim = desc_ini;
                tamanho++;
    }
    public void insereFinal(Object o) {
                Nodo y = desc_fim;       //y recebe a ref. do ultimo nó, oriundo do desc_fim                      
                Nodo x = new Nodo();   //cria um novo no
                x.setNo(o);       //atribui o objeto "o" a objeto x
                x.setProx(null); //atualiza o "link" para o próximo nó
                                                                            //como é insereFinal, aponta para null
                y.setProx(x);                 //atualiza o "link" do ultimo nó com o x
                desc_fim = x;                //atualiza desc_fim
                tamanho++;                              //atualiza o numero de elementos
    }
    public boolean isEmpty(){
    	if (tamanho==0)
    		return true;
    	else
    		return false;
    }
    public void removeInicio() {
    		if (isEmpty()){
    			System.out.print("Lista Vazia");}
    		else{
    			desc_ini = desc_ini.getProx();
				tamanho--;
    		}
    }	
    public void removeFinal() {
    		if (isEmpty()){
    			System.out.print("Lista Vazia");}
    		else{
    		Nodo x;
    		x = desc_ini;
    		while(x.getProx()!= desc_fim){
    			x = x.getProx();
    		}
    		x.setProx(null);
    		desc_fim =x;
    		tamanho--;
    }		
    }
    public void inserePos(Object o, int pos) {
        if(isEmpty()) {
              println("Lista vazia.");
        } else if(pos == 0) {
              insereInicio(o);
        } else if (pos > tamanho) {
              println("Posição fora dos limites");
        } else {          
              Nodo x = desc_ini;
              for(int i=0; i<pos-1; i++) {
                    x=x.getProx();
              }
              Nodo y = new Nodo();
              y.setNo(o);
              y.setProx(x.getProx());
              x.setProx(y);
              tamanho++;
        }
  }




    
    public void removePos(int pos) {
        if(isEmpty()) {
              println("Lista vazia.");
        } else if(pos == 0) {
              removeInicio();
        } else if (pos > tamanho) {
              println("Posição fora dos limites");
        } else {          
              Nodo x = desc_ini;
              for(int i=0; i<pos-1; i++) {
                    x=x.getProx();
              }                       
              x.setProx(x.getProx().getProx());
              tamanho--;
        }
  }
    		
    
    /*
     * Métodos Auxiliares
     */        
    public void listar() {
                if(desc_ini == null)
                            println("Lista vazia");
                else {
                            Nodo x = desc_ini;
                            print("[");
                            while(x.getProx() != null) {                                  
                                        print(x.getNo()+" ");
                                        x = x.getProx();
                            }
                            print(x.getNo()+" ");
                            print("]\n");                                
                }
    }
    
    public String listar_grafico() {
                String msg="";
                if(desc_ini == null)
                            return "Lista vazia";
                else {                
                            Nodo x = desc_ini;
                            msg = "[";
                            while(x.getProx() != null) {                                  
                                        msg += x.getNo()+" ";
                                        x = x.getProx();
                            }
                            msg += x.getNo();
                            msg += "]\n";
                            return msg;                               
                }                       
    }


    public int size() {
                return tamanho;
    }
    
    private void print(String s) {
                System.out.print(s);
    }


    private void println(String s) {
                System.out.println(s);
    }


    private void print(Object o) {
                System.out.print(o);
    }
    
    private void println(Object o) {
                System.out.println(o);
    }
    
}	

// Segunda parte

	public class TesteListaEncadeada {


	            public static void main(String[] args) {
	                        
	                        ListaEnc l = new ListaEnc();
	                        
	                        l.insereInicio("laranja");              
	                        l.insereInicio("banana");
	                        l.insereFinal("pera");
	                        l.listar();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.insereInicio("limao");
	                        l.insereInicio("mamao");            
	                        l.listar();
	                        l.removeInicio();            
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.listar();
	                        l.removeFinal();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.listar();
	                        System.out.println("A lista possui "+l.size()+" elementos");
	                        l.inserePos("berganota",2);
	                        l.listar();
	                        l.removePos(0);
	                        l.listar();
	            }
	}

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus [/color][/size] :joia:

Bom, nunca tentei fazer isso em JAVA, mas vamos tentar resolver o teu problema, ja que ninguem se manifesta…eheheheh

Vamos aos conceitos primeiros(vc ja deve saber): lista simplesmente encadeada é aquela que é capaz de apenas seguinr um sentido (os ponteiros…dah).

Uma duplamente encadeada é capaz dee voce ir por um sentido, ou se necessario, voltar.

Bom, para isso, voce precisa ter um atributo a mais para indicar o endereco do NODO anterior… então é o seguinte:

Eu faria algo assim: se voce quer passar de uma lista para a outra, se faria necessario o uso de duas classes, uma para as simplesmente e outra para as duplamente… pq? è necessar um atributo a mais. Ou voce usa numa mesma classe um atrtibuto que so vai receber o endereco do nodo anterior quando tiver passando de um para o outro.

se faria necessario tb dois poteiros, o p1 e p2, sendo p2 sempre um nodo na frente do p1… pq?? o seguinte:

nodo(p2).endereco = nodo(p1).endereco…

ou seja, o nodo em p2 esta apontando necessita do endereco no NODO anterior, entao ele recebe apartir do p1, que SEMPRE vai estar 1 nodo atras de p2…

acho que conceitualmente é isso, agora o codigo fica mais complicado de escrever, ate faria isso, mas o problema é que ja estou cheio de trabalhos pra fazer…

Mas espero que tenha surgida uma luz no fim do tunel…

um abracao!

Valeu amigo vou tentar qualquer coisa se conseguir te passo o codigo em java!
Valeu abraços.

eu nunca tentei fazer isso sem ponteiros, mas vamos lá
a idéia de duplamente encadeada é simples
você encadeou de tras pra frente, agora encadeie de frente pra tras
quando eu usava ponteiros, eram 2 ponteiros juntos pra voltar :slight_smile:

variavel.^ponteiro1.^ponteiro2