# Zyklische Listen



## paco89 (21. Feb 2012)

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


```
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?


----------



## paco89 (21. Feb 2012)

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 (21. Feb 2012)

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

so ungefähr...

```
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 (21. Feb 2012)

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:


```
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?


----------



## ARadauer (21. Feb 2012)

ja wenn deine liste der kopf ist... btw probiers doch aus....


----------



## paco89 (21. Feb 2012)

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:



```
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?


----------



## Andi_CH (22. Feb 2012)

Funktioniert das, was du abgetipppt hast und wenn "nein" warum nicht?


----------

