Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68

    [JAVA] metodo insertBefore Lista concatenata

    Ciao a tutti, vi voglio esporre un altro problema che ho riscontrato nella mia Lista Concatenata:
    devo creare un metodo

    public void insertBefore(int dt, int in) {


    }


    che inserisce un nuovo elemento nella lista DAVANTI al primo elemento (nella lista) contenente uno specificato valore data dt . Se dt non occorre nella lista allora non viene inserito nulla. Il campo data di tale nuovo elemento deve contenere il valore specificato da in

    ecco le mie classi con i relativi metodi:




    codice:
    public class ListaConcatenata {
    
    	private class ListElem {
    	
    		private int cargo;
    		private ListElem next;
    	
    	
    		public ListElem () {
    			cargo = 0;
    			next = null;
    		}
    	
    		public ListElem (int cargo) {
    			this.cargo = cargo;
    			next = null;
    		}
    	
    		public ListElem (int cargo, ListElem next) {
    			this.cargo = cargo;
    			this.next = next;
    		}
    	
    		public int getCargo () {
    			return cargo;
    		}
    	
    		public ListElem getNext () {
    			return next;
    		}
    	
    		public void setCargo (int cargo) {
    			this.cargo = cargo;
    		}
    	
    		public void setNext (ListElem next) {
    			this.next = next;
    		}
    
    		
    	}
    
    
    
    
    
    
    
    	private ListElem first;
    	
    	public ListaConcatenata () {
    		first = null;
    	}
    	
    	public int getFirst () {
    		return first.getCargo();
    	}
    	
    	public ListElem getFirstLE () {
    		return first;
    	}
    	
    	public void setFirst (ListElem primo) {
    		first = primo;
    	}
    	
    	public void insert (int val) {
    		ListElem nuovo = new ListElem(val);
    		if (first == null)
    			first = nuovo;
    		else {
    			nuovo.setNext(first);
    			first = nuovo;
    		}
    	}
    
    	
    	public void stampa () {
    		if (first == null)
    			System.out.print("Lista vuota");
    		else {
    			ListElem iterator = first;
    			while (iterator != null) {
    				System.out.print(iterator.getCargo() + " ");
    				iterator = iterator.getNext();
    			}	
    		}
    	} 
    	
    
    
    
    
    
    
    	public static void main (String [] args) {
    		
    		ListaConcatenata miaLista1 = new ListaConcatenata ();
    
    		miaLista1.insert(8);
    		miaLista1.insert(7);
    		miaLista1.insert(6);
    		miaLista1.insert(5);
    		miaLista1.insert(4);
    		miaLista1.insert(3);
    		miaLista1.insert(2);
    		miaLista1.insert(1);
    		
    
    					
    	}
    
    }





    grasieeeee a chi mi risponde!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    rifletti innanzitutto sul risultato che devi ottenere

    Hp: una lista, un dato dato, un dato da inserire insertInfo
    Ts: interire l'elemento PRIMA di quello che ha dato

    fatti restituire chi ha dato. sono dato non c'è hai finito, se c'è devi fare un po' di giri...la lista è doppiamente concatenata?

    lista doppiamente concatenata devi

    1. prendi il precedente di nodeData (hai trovato nodeData? questo ha prec e succ) e chiamalo che so precNodeData. precNodeData.succ = insertInfo.
    2. nodeData.prec = insertInfo
    3. insertInfo.succ = nodeData

    se non ho sbagliato niente

    altrimenti, lista semplicemente concatenata devi scorrere manualmente la lista fino a quando non trovi node, cioè (pseudo code)
    codice:
    for (node in NodeList){
      se node.succ è nodeData{
         info.succ diventa node.succ
         node.succ diventa info
    hai finito
      }
    }
    spero di essere stata chiara (e di non aver fatto errori)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    scusa ma non mi è ben chiaro.. Io ho fatto così:





    codice:
    // CLASSE ListaRicorsiva
    
    
    public void insertBefore (int val, int bf) { 
    	if (first == null)
    		throw new RuntimeException ("Lista vuota");
    	else {
    		Nodo iterator = first; //puntatore per scorrere la lista
    		while (iterator !=null) {
    			if (iterator.getNext().getDato() == bf && iterator.getNext() != null) { //se il puntatore ha lo stesso valore di bf 
    				Nodo nuovoNodo = new Nodo (val); //creo il nuovo nodo e faccio i vari settaggi dei next
    				nuovoNodo.setNext(iterator);
    				iterator.setNext(nuovoNodo);
    				iterator = nuovoNodo.getNext();
    			}
    		iterator = iterator.getNext(); // avanzo l'iteratore
    		}
    	}
    }


    quando test questo metodo loopa..

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    codice:
    // CLASSE ListaRicorsiva
    public void insertBefore (int val, int bf) { 
    	if (first == null)
    		throw new RuntimeException ("Lista vuota");
    	else {
    		Nodo iterator = first; //puntatore per scorrere la lista
                    
                    //Occupati del caso in cui hai un solo elemento in lista
                    if (iterator.getNext() == null && iterator.getDato() == bf) {
                       insert(new Nodo(val), iterator);
                    }else{
                              //Occupati degli altri casi
               		while (iterator.getNext() !=null) {
    	        		if (iterator.getNext().getDato() == bf ) { 
    			                 insert(new Nodo(val), iterator);
                                             return;
    		        	}
                                   iterator = iterator.getNext();
    		        }
    	       }
       }
    
    private void insert(Nodo nuovoNodo, Nodo succ){
    	nuovoNodo.setNext(succ);
    	succ.setNext(nuovoNodo);
    }
    prova, non l'ho testato, l'ho scritto al momento

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    alla fine ho risolto così:



    codice:
    public void insertBefore (int val, int bf) {
    		if (first == null)
    			throw new RuntimeException ("Lista vuota");
    		if (this.member(bf) == false)
    			throw new RuntimeException ("elemento non trovato nella lista");
    		else {
    			Nodo iterator = first;
    			boolean inserito = false;
    			if (first.getDato() == bf) {
    				System.out.println("caso inserimento first");
    				Nodo nuovoNodo = new Nodo(val);
    				nuovoNodo.setNext(first);
    				first = nuovoNodo;
    				inserito = true;
    			}
    			while (!inserito) {
    					System.out.println("caso inserimento a metà");
    					if (iterator.getNext().getDato() == bf) {
    					Nodo nuovoNodo = new Nodo(val);
    					nuovoNodo.setNext(iterator.getNext());
    					iterator.setNext(nuovoNodo);
    					inserito = true;
    				}
    				iterator = iterator.getNext();
    			}
    		}
    	}

    Grazie comunque per l'auito!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.