LinkedList

NoraaaaS

Mitglied
Kann mir jemand sagen, was in diesen Methoden passiert? Zeile für Zeile?

Java:
	public int size() {
		int count = 0 ;
		Node pointer = first;

		while (pointer != null) {
			count++;
			pointer = pointer.getNext();
		}
		return count;
	}

		//-----------------------------------------------------------
	
	
	public int getElementAt(int pos) {
		Node pointer = first;
		int position = pos;

		for (int i = 1; i < position; i++)
			pointer = pointer.getNext();
		return pointer.getData();
	}
	
		//----------------------------------------------------------
	
	
	public void setElementAt(int pos, int value) {
		Node pointer = first;
		int position = pos;
		int val = value;

		for (int i = 1; i < position; i++)
			pointer = pointer.getNext();
		pointer.setData(val);

	}
		//----------------------------------------------------------
	
	
	public int getFirst() throws SLLEmpty {
		if (first != null) {
			return first.getData();
		} else {
			throw new SLLEmpty();
		}

	}

	//----------------------------------------------------------
	
	
	public int getLast() throws SLLEmpty {
		if (first == null) {
			throw new SLLEmpty();
		} else {
			Node pointer = first;
			while (pointer.getNext() != null) {
				pointer = pointer.getNext();
			}
			return pointer.getData();
		} 
	
	
	}
	//----------------------------------------------------------
	
	public Node remove(int pos) throws SLLEmpty {
		Node pointer = first;
		Node pointerTemp = first;
		int position = pos;
		 Object value = null;

		if (first == null) {
			throw new SLLEmpty();
		} else if (position == 1) {
			removeFirst();
		} else {
			for (int i = 1; i < position - 1; i++)
				pointer = pointer.getNext();
			value = pointer.getNext().getData();
			pointerTemp = pointer.getNext().getNext();
			pointer.setNext(null);
			pointer.setNext(pointerTemp); 
		}
		return pointerTemp;
	}
	
	//----------------------------------------------------------
	
		
    public int removeFirst() throws SLLEmpty {
        if (first != null) {
            int value = first.getData();
            first = first.getNext();
			
            return value;
        } else {
            throw new SLLEmpty();
        }

    }
   //----------------------------------------------------------
    
    
    public int removeLast() throws SLLEmpty {
		int length = size();

		if (length == 0) {
			throw new SLLEmpty();
		} else if (length == 1) {
			int value = first.getData();
			first = null;
			return value;
		}
		else {
			Node pointer = first;
			while (pointer.getNext().getNext() != null) {
				pointer = pointer.getNext();
			}
			int value = pointer.getNext().getData();
			pointer.setNext(null);
			return value;
		}

	}
  
    
    public int[] toArray() {
    int size = size();
    int[] array = new int[size];
    Node pointer = first;
    int counter = 0;
    while (pointer.getNext() != null) {
        array[(int) counter] = pointer.getNext().getData();
        counter++;
        pointer = pointer.getNext();

    }
    return array;
}
}


	//----------------------------------------------------------------------------------------------------------------
 
Sofern du des Englischen mächtig bist, solltest wenigstens einen Versuch selber unternehmen, und uns versuchen zu erklären was du glaubst zu verstehen an dem Code. Bei Fehlern ist man gern gewillt zu helfen, aber bei 0 Eigeninitiative ist Hilfe idR [STRIKE]ausgeschlossen[/STRIKE] nicht zu erwarten.
 
Sofern du des Englischen mächtig bist, solltest wenigstens einen Versuch selber unternehmen, und uns versuchen zu erklären was du glaubst zu verstehen an dem Code. Bei Fehlern ist man gern gewillt zu helfen, aber bei 0 Eigeninitiative ist Hilfe idR [STRIKE]ausgeschlossen[/STRIKE] nicht zu erwarten.

Ich bitte Dich! Ich sitze heute den ganzen Tag dran, und komme nicht vorran.
Ich schreibe hier aus lauter Verzweiflung!
Es ist nicht so, dass ich nichts getan habe, komme einfach nur nicht vorran.

Deswegen BITTE
 
Ich bitte dich dann auch, sry aber es gibt genug Beiträge die derart kurz und knapp beginnen mit ewig Codezeilen dran. Wenn du selbst schon vordokumentieren würdest, soviel wie geht versteht sich, dann ist das was anderes, dann kann man das vervollständigen oder korrigieren, aber einfach ma 140 Zeilen neu kommentiert bekommen ist nicht selbstverständlich.

Ich helf gern, gar kein Thema, aber nicht von 0 an :bahnhof:
 
Ich bitte dich dann auch, sry aber es gibt genug Beiträge die derart kurz und knapp beginnen mit ewig Codezeilen dran. Wenn du selbst schon vordokumentieren würdest, soviel wie geht versteht sich, dann ist das was anderes, dann kann man das vervollständigen oder korrigieren, aber einfach ma 140 Zeilen neu kommentiert bekommen ist nicht selbstverständlich.

Ich helf gern, gar kein Thema, aber nicht von 0 an :bahnhof:

und ich leider nicht, warum kannst du mir nicht helfen?
Für jemand, der Java kennt, ist das mit Sicherheit kein Problem!
Für mich leider schon!

Deswegen bin ich um diese Uhrzeit noch dran und verzweifelt.
Deswegen BITTE!
Ich verstehe wirklich nicht viel..
 
Ich muss mich diggaa1984 anschließen. Was ist den dein konkretes Problem? Zeile für Zeile wird dir das niemand erklären. Natürlich könnten wir es, das ist kein Problem, aber warum sich so viel Arbeit machen?
 
Ich verstehe diesen Code einfach nicht!
Dann fall halt durch die Prüfung die du anscheinend morgen schreiben must durch und les ein Java Buch, für jemanden keine Ahnung hat ist ein Forum der falsche Ort. Den wenn du zumindest ein bisschen Ahnung hättest könntest du ja eine konkrete Stelle nennen die du nicht verstehst, oder?...
 
Java:
    public int size() { // Methodensignatur. public = überall sichtbar, int = Rückgabewert (32-Bit-Ganzzahl), size = Methodenname ("Größe")
        int count = 0 ; // deklariert Variable count vom Typ int und weist dieser den Wert 0 zu
        Node pointer = first; // deklariert Variable pointer vom Typ Node und weist dieser den Wert von first zu
 
        while (pointer != null) { // wiederholt, bis die Variable pointer null ist
            count++; // inkrementiert die Variable count
            pointer = pointer.getNext(); // weist der Variable pointer den Rückgabewert des Methodenaufrufs pointer.getNext() zu
        }
        return count; // gibt die Variable count zurück
    }

http://www.java-forum.org/hausaufga...eim-erschleichen-loesungen-fuer-aufgaben.html
 
Java:
    public int size() { // Methodensignatur. public = überall sichtbar, int = Rückgabewert (32-Bit-Ganzzahl), size = Methodenname ("Größe")
        int count = 0 ; // deklariert Variable count vom Typ int und weist dieser den Wert 0 zu
        Node pointer = first; // deklariert Variable pointer vom Typ Node und weist dieser den Wert von first zu
 
        while (pointer != null) { // wiederholt, bis die Variable pointer null ist
            count++; // inkrementiert die Variable count
            pointer = pointer.getNext(); // weist der Variable pointer den Rückgabewert des Methodenaufrufs pointer.getNext() zu
        }
        return count; // gibt die Variable count zurück
    }

http://www.java-forum.org/hausaufga...eim-erschleichen-loesungen-fuer-aufgaben.html


Warum, weit der Variable Pointer den Rückgabewert des Methodenaufrufs pointer.getNext() zu?
Ich verstehe diesen Vorgang nicht!
 
Warum, weit der Variable Pointer den Rückgabewert des Methodenaufrufs pointer.getNext() zu?
Ich verstehe diesen Vorgang nicht!


Java:
Node pointer = first;

while (pointer != null) {
    count++;
    pointer = pointer.getNext();
}

pointer zeigt mit dem ersten Befehl auf das erste Element der Liste. Danach wird die Schleife solange ausgeführt, bis pointer auf null zeigt. Also kann die Schleife nur beendet werden (wenn Elemente in der Liste vorhanden sind) wenn sich pointer, während der Ausführung auch ändert. Würde sich pointer nie ändern, dann wäre das eine Endlosschleife, wenn mind. 1 Element in der Liste enthalten ist!

Daher wird pointer (der Variable zur Überprüfung des Schleifenabbruchs) innerhalb der Schleife ein neuer Wert zugewiesen, das Folgeelement des aktuell durch pointer referenzierten Elementes. Somit zeigt pointer irgendwann auf null, wenn getNext() des letzten Listenelementes aufgerufen wurde. Der Nachfolger des letzten Elementes ist null!

Hoffe das war irgendwie klar!?
 
Zuletzt bearbeitet:
Lege 5 Äpfel in eine Reihe vor dir auf den Tisch.

Zeige auf den linken Apfel. Wenn vorhanden, sage laut "Eins". Rücke mit deinem Finger 5cm nach rechts.
Zeige auf den Apfel. Wenn vorhanden, sage laut "Zwei". Rücke mit deinem Finger 5cm nach rechts.
Zeige auf den Apfel. Wenn vorhanden, sage laut "Drei". Rücke mit deinem Finger 5cm nach rechts.
Zeige auf den Apfel. Wenn vorhanden, sage laut "Vier". Rücke mit deinem Finger 5cm nach rechts.
Zeige auf den Apfel. Wenn vorhanden, sage laut "Fünf". Rücke mit deinem Finger 5cm nach rechts.

Wenn kein Apfel mehr vorhanden sein sollte. denk nach, was du als letztes gesagt hast.

meow?
 
Warum, weit der Variable Pointer den Rückgabewert des Methodenaufrufs pointer.getNext() zu?
Ich verstehe diesen Vorgang nicht!


Damit die while-Schleife prüfen kann, ob pointer auf das Ende der Liste zeigt, wird die Referenz von pointer.getNext() an pointer zugewiesen. Andere Frage: Weisst Du was eine LinkedList ist und wie sie arbeitet?
 
Du kannst doch nicht einen Code hier posten, den du nichtmal Ansatzweise verstehst?
Das ist ja ein Hilfs-Forum wenn man es so ausdrücken darf und kein "Lösung-auf-Anhieb"- Forum.

Wenn du eine Prüfung schreibst, solltest du dich doch mal nebenher informiert haben und dir ein Buch o.ä. zugelegt haben?..

Ansonsten schau im Galileo- Openbook die Themen gezielt nach, denn ein Code zu verstehen Bedarf dem Verständnis mehrerer Themen.

--
 
@NoraaaaS
Hast du denn verstanden oder glaubst zu verstehen, wie die Single Linked List in deinem Beispiel generell aufgebaut ist ?
 

Neue Themen


Zurück
Oben