Zyklische Listen

paco89

Bekanntes Mitglied
hallo, hab folgende aufgabe (s.Bild) versucht wie folgt zu lösen:

Java:
public int length()
{
	List kopf;
	int ergebnis =0;
	
	while(kopf.next != null)
	{
		ergebnis = ergebnis +1;
	}	

        return ergebnis;
}


so, ich hab es bis jetzt nie geschafft, eine programmaufgabe richtig zu lösen. also glaube ich nicht dass es auch richtig ist. zumal ich hier mir schon denken kann, was falsch ist. wie im bild zu sehen ist, zeigt das letzte element wieder auf das erste. und ich wusste nicht wie ich ausdrücken kann, dass der zählvorgang abbrechen soll, falls das ganze wieder an den anfang kommt.


kann mir da jmd. bitte helfen?
 

Anhänge

  • Bild.jpg
    Bild.jpg
    35 KB · Aufrufe: 35

paco89

Bekanntes Mitglied
gibt es da vtl. eine möglichkeit, das objekt mit dem ich angefangen habe irgendwie zu markieren? sodass wenn ich das markierte objekt erreicht, die bedingung abbricht?
 

ARadauer

Top Contributor
ja stimmt, das nächste vom letzten ist das erste...

so ungefähr...
Java:
public int length()
{
    List aktulles = kopf; //aktuell schaun wir auf den kopf
    int ergebnis =0;
    
    while(aktuelles.next != kopf) //ist das nächste vom aktuellen der kopf brechen wir ab
    {
        ergebnis = ergebnis +1;
        aktuelles = aktuelles.next; //aktuell ist jetzt das nächste
    }   
 
        return ergebnis;
}
 

paco89

Bekanntes Mitglied
könnte ich das denn nicht auch etwa mit "this" machen? ich hab ma irgendwo gelesen, dass this auf das aktuelle objekt zeigt. also ich meine ungefähr so hier:

Java:
public class List
{
	public int length()
	{
		List a = this.next;
		int ergebnis = 1;
		
	while(a!=this)
	{
		a = a.next;
		ergebnis = ergebnis +1;
	}
		return ergebnis;
	}

}


kann das so auch stimmen?
 

paco89

Bekanntes Mitglied
ja, okay. das kann ich jetzt. vielen dank. ich hab jetzt versucht die andere teilaufgabe b) (s.bild) zu lösen. und hab folgendes abgetippt:


Java:
public class List
{
	public int get(int i)
	{
		return get(int i, this)
	}
	
	private static int get (int i, List element)
	{
		if(element.val == null)
			return null;
		else if (element.val == i)
			return i;
			
		else
			return(i, element.next);
	}
}


ich habs mal so versucht. sieht das so okay, aus?
 

Anhänge

  • Bild1.png
    Bild1.png
    28,2 KB · Aufrufe: 17

Neue Themen


Oben