07. marts 2002 - 17:54Der er
9 kommentarer og 1 løsning
slet() metode!
Hej Eksperter, jeg har en dobbelthægtet liste med pointerne foerste, aktuel, naeste og forrige.
problemet er at jeg skal have en funktion der kan slette et af elementerne i listen, og så skal de andre elementers pointere jo bare springe det givne element over, men hvordan løses det!
ud fra det element der skal slettes tager du next referencen, og sætter previous objectets next pointer til denne værdi, det samme med previous pointere.
du har 3 objecter i din hægtede liste, alle 3 objecter han en next pointer der peger på næste object og en previous pointer der peger på foregående object.
1: next: peger på #2 previous: peger på sig selv da der ikke er et foregående.
2: next: peger på #3 previous: peger på #1
3: next: peger på ingenting da der ikke er en næste previous: peger på #2
vi vil nu slette #2 Vi gemmer værdierne af #2's next og previous pointer. #1's next pointer skal så sættes til den next værdi vi lige har gemt. #3's previous pointer skal så sættes til den previous værdi vi lige har gemt. Så ser det sådanne ud:
#1 next: #3 previous: ingenting
#3 next: ingenting previous: #1
object #2 er hermed blever fjernet fra din liste.
Nogle gange har man en cirkular dobbelthægtet liste altså at sidste element peger på det første og omvendt.
bedre sent end aldrig - har lige været væk et par timer. Jeg prøver først lige med din sidste metode...
//klassen VideoListe har metoder der konstruere den dobbelthægtede liste //og indsætter Videoer objektet i listen efter alfabetisk rækkefølge class VideoListe {
//intern klasse, der definerer opbygningen af et listeElement class listeElement { Videoer v; //Videoer objektet listeElement forrige, naeste; //reference til forrige og naeste element i listen
//konstruktør der modtager et Videoer objekt og sætter denne lig v public listeElement(Videoer nyVideo) { v = nyVideo; forrige = null; naeste = null; }
//indsæt metode der indsætter det modtagne objekt i listen alfabetisk rækkefølge //efter originale titel på videoen public void indsaet(Videoer hv) { listeElement ny = new listeElement(hv);
//hjælpemetode til indsaet(), der returnerer -true- hvis Videoer v1 kommer alfabetisk før Videoer v2 //ellers retuneres boolean værdien -false- private boolean alfabetiskFoer(Videoer v1, Videoer v2) { if (v1.getoTitel().compareTo(v2.getoTitel())<=0) return true;
else return false; }
//frem() - metode til at bladre i listen fra GUIen public void frem() { if(aktuel==null) { aktuel= foerste; } else if(aktuel.naeste== null) { aktuel= foerste; } else aktuel= aktuel.naeste; }
//tilbage() - metode til at bladre i listen fra GUIen public void tilbage() { if(aktuel==null) { aktuel= sidste; } else if(aktuel.forrige==null) { aktuel= sidste; } else aktuel= aktuel.forrige; }
//nedenstående er hentmetoder der gør det muligt fra GUIen at udskrive //og bladre i listen af Videoer
public String hentTitel() { return aktuel.v.getoTitel(); }
public String hentDanskTitel() { return aktuel.v.getDanskTitel(); }
public String hentNationalitet() { return aktuel.v.getNationalitet(); }
public String hentArt() { return aktuel.v.getArt(); }
public int hentAar() { return aktuel.v.getAar(); }
public String hentInstruktoer() { return aktuel.v.getInstruktoer(); }
public String hentSkuespillere() { return aktuel.v.getSkuespillere(); }
public String hentRegnr() { return aktuel.v.getRegnr(); }
denne metode har jeg fået bikset sammen - den virker næsten efter planen! Jeg har tænkt mig at lukke, men giver dig point for dit andet svar med forklaring på hvad der skulle gøres, den satte mig lidt i sving.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.