Comparar duas listas encadeadas

6 respostas
G

Boa noite,

Preciso fazer um método que compare duas listas (simplesmente( encadeadas e retorne uma nova lista com os elementos em comuns…

Estou batendo a cabeça pq nem sei por onde começar…

6 Respostas

Demys_Cota

No exemplo vou usar String pois não sei quanto o tipo de objeto da sua lista então é só substituir.

List<String> list3 = new ArrayList();
     for(String txt1: lista1){
          for(String txt2: lista2){
                 if(txt1.equals(txt2)){
                       list3.add(txt1);
                 }
          }
     }
G

Obrigada… mas não sei se é bem isto

minha classe List tem os seguintes atributos…

public class List {
   private Node firstNode;
   private Node lastNode;
   private String name;  // string like "list" used in printing

e tb tem a classe Node:

class Node {
   private Object data;    
   private Node nextNode;

   public Node( Object object ) { 
      this( object, null ); 
   }
   // create Node that refers to Object and to next Node
   public Node( Object object, Node node ) {
      data = object;    
      nextNode = node;  
   }
   // return reference to data in node
   public Object getData()  { 
      return data; // return Object in this node
   }
   public void setData (Object element){
       data = element;
   }
   // return reference to next node in list
   public Node getNext() { 
      return nextNode; // get next node
   }
   public void setNext(Node o) 
   { 
      nextNode = o; 
   }
} // end class Node

e o meu método é este:

//Crie um novo método para a classe List que receba 2 listas por parâmetro e retorne uma nova lista contendo os elementos 
 //  comuns às duas recebidas por parâmetro, conforme a assinatura a seguir:

	   public List comuns(List l1, List l2)

Eu não estou sabendo como comparar cada item da lista, se uso getData(), equals… como passar por cada nodo da lista…

Demys_Cota

Vê se isso ajuda

public class List {
    private Node firstNode;  
    private Node lastNode;  
    private String name;  // string like "list" used in printing 
    private Node [] lista; 
    
    public Node getFirstNode(){
        return lista[0];
    }
    
    public void add(Node node){
        lista = new Node[lista.length +1];
        lista[lista.length] = node;
    }
    
    public Node getNode(int index){
            return lista[index];
    }
    
    public Node getLastNode(){
        return lista[lista.length -1];
    }
    
    public List comuns(List l1, List l2){
        List list = new List();
        for(int i = 0; i < l1.lista.length;i++){  
            for(int j = 0; j < l2.lista.length;j++){  
                if(l1.getNode(i).equals(l2.getNode(j))){  
                   list.add(l1.getNode(i));  
                }  
            }  
        }
        return list;
    }
    
}
Demys_Cota

Vê se isso ajuda

public class List {
    private Node firstNode;  
    private Node lastNode;  
    private String name;  // string like "list" used in printing 
    private Node [] lista; 
    
    public Node getFirstNode(){
        return lista[0];
    }
    
    public void add(Node node){
        Node lista1 = new Node[lista.length +1];
        for(for int i; i < lista.lenght; i++){
             lista1[i] = lista[i];
        }

        lista1[lista.length] = node;
        lista = lista1;
    }
    
    public Node getNode(int index){
            return lista[index];
    }
    
    public Node getLastNode(){
        return lista[lista.length -1];
    }
    
    public List comuns(List l1, List l2){
        List list = new List();
        for(int i = 0; i < l1.lista.length;i++){  
            for(int j = 0; j < l2.lista.length;j++){  
                if(l1.getNode(i).equals(l2.getNode(j))){  
                   list.add(l1.getNode(i));  
                }  
            }  
        }
        return list;
    }
    
}
Demys_Cota

também não esqueça de sobrescrever o equals da classe Node.

G

Certo, obrigada. Consegui fazer com suas dicas.

Criado 27 de abril de 2013
Ultima resposta 4 de mai. de 2013
Respostas 6
Participantes 2