[JAVA] Metodo ricorsivo cancella

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Bax91
Prode Principiante
Messaggi: 13
Iscrizione: martedì 20 novembre 2012, 19:25
Distribuzione: Linux ubuntu 3.2.0-29-generic

[JAVA] Metodo ricorsivo cancella

Messaggio da Bax91 »

Salve ragazzi sto cercando di compilare un metodo che data una lista di interi e dato un valore ,elimina dalla lista la prima occorenza del
valore.

Codice: Seleziona tutto

 
public void cancella (Elemento x){
     if (testa==null)
     if (testa.inf==x)
           {
           testa=testa.next;
     else
          cancella(testa,x);

           }


private void cancella (Elemento t, int x){
   if(t.next!=null)
     return 0;
   else 
    {
     if (t.next.inf==x)
          {
           t.next = t.next.next;
          }
     else 
         {
           cancella(t.next,x);
         }
   }
}

Ma non riesco ad andare avanti qualcuno mi può dare una mano?
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [JAVA] Metodo ricorsivo cancella

Messaggio da ienaplinsky »

Ciao potresti postare tutto il codice?

testa cos'è il membro di una classe? Di che tipo è?
Bax91
Prode Principiante
Messaggi: 13
Iscrizione: martedì 20 novembre 2012, 19:25
Distribuzione: Linux ubuntu 3.2.0-29-generic

Re: [JAVA] Metodo ricorsivo cancella

Messaggio da Bax91 »

Ciao testa è l'inizio della lista concatenata ho creato una classe Elemento per creare il nodo della lista questo è il codice:

Codice: Seleziona tutto

public class Elemento {
    
    public int inf;  //Valore del nodo
    public Elemento next;   //Puntatore di lista 
    
    //COSTRUTTORE DI LISTA CON UN SOLO PUNTATORE(next) PERCIO' LA LISTA SARA'
    //PERCORRIBILE SOLO PARTENDO DAL NODO INIZIALE
    public Elemento(int inf,Elemento next)
    {
        this.inf=inf;     //INIZIALIZZAZIONE
        this.next=next;
    }
    
}
Questa invece è la classe Lista con il metodo visualizza e un metodo verifica

Codice: Seleziona tutto

public class Lista2 {
  Elemento testa=null;
  
  //COSTRUTTORE CHE ISTANZIA UNA SERIE DI N INTERI
  
  public Lista2(int n){
    for(int i=0;i<n;i++)
    {
        testa=new Elemento((int)(Math.random()*100),testa);
    }
}
  public void visualizza()
  {
      for(Elemento corrente=testa;corrente!=null;corrente=corrente.next)
      {
          System.out.print(corrente.inf+" ");
      }
      System.out.println("");
  }
  
  
  //SCRIVERE UN METODO RICORSIVO CHE DATO UNA LISTA DI INTERI AD OGNI ELEMENTO DISPARI 
  //SOSTITUISCE IL SUO DOPPIO E IL NUMERO DI VALORI MODIFICATI 
 private int modifica(Elemento testa)
 {
   if(testa==null)
        return 0;
   else 
   {
     if(testa.inf%2==0)
     {
         return modifica(testa.next);
     }
     else
     {
         testa.inf *=2;
         return 1+modifica(testa.next);
     }
   }
}    
public int modifica()
  {
    return modifica(testa);
  }
e poi ho la classe main i nucleo del programma

Codice: Seleziona tutto

public class Main {
    public static void main(String[] args) {
        Lista2 l=new Lista2(20);
        l.modifica();
        l.visualizza();
    }
    
}

come puoi vedere ho usato testa anche nel metodo modifica e visualizza testa dovrebbe essere il primo elemento della coda se ho ben capito...o credo il valore del primo puntatore di lista!
Gerry Ghetto

Re: [JAVA] Metodo ricorsivo cancella

Messaggio da Gerry Ghetto »

Perché non prendi per esempio ArrayList?
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [JAVA] Metodo ricorsivo cancella

Messaggio da ienaplinsky »

Potresti procedere utilizzando un metodo pubblico che ne richiama uno privato dove ti fai ritornare la lista

Codice: Seleziona tutto

public void cancella(Elemento x) {
        testa = cancella(testa, x);
    }

    private Elemento cancella(Elemento head, Elemento x) {
        if(head == null) {
            return null;
        }
        if(head.inf == x.inf) {
            return head.next;
        }
        head.next = cancella(head.next, x);
        return head;
    }
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti