2017-09-07 1 views
0

Ich schreibe eine verkettete Liste (die Java nicht verwendet) und versuche eine get-Methode zu erstellen, um ein Element der Liste nach seiner Indexnummer zurückzugeben. Ursprünglich habe ich dies mit einer for-Schleife geschrieben. Mein Code versagt wiederholt bei einem Test, bei dem er das Element bei Index 0 abruft (ich kann anscheinend Elemente bei anderen Indizes abrufen). Curr ist nur für mich, um den aktuellen Knoten zu verfolgen.Abrufen eines Elements nach Index in der Java-Verkettungsliste

Ich dachte, die for-Schleife könnte sein, was mir Ärger machte, also schrieb ich es als While-Schleife.

while (curr != null) { 
    if (i == index) { 
    i++; 
    return curr.data; 
} 
curr = curr.next; 
} 

Aber ich habe immer noch Probleme, das Element an dem 0-Index abgerufen werden. Ich schätze jede Eingabe darüber, wie diese Methoden des Traversierens problematisch sein könnten. Ich bin irgendwie verloren. Ich entschuldige mich auch, wenn meine Formatierung ausgeschaltet ist, gewöhnt ich mich noch an die Formatierung auf dieser Seite.

+0

Beachten Sie, dass Ihre Grenzen Kontrollen (zB 'if (index> numElts) {') sollte vor der Schleife liegen, da sie den Wert im Schleifenkörper nicht ändern. –

+0

@AndyTurner Die Überprüfung der internen Grenzen sollte nicht einmal notwendig sein, da sie sowieso nur zu billie

+0

@billie true, aber warum sollten Sie die ganze Liste iterieren, wenn Sie wissen, dass es zu Beginn nicht erlaubt ist? –

Antwort

0

Sie initialisieren curr als sentinal.next, würde dies nicht dazu führen, dass Sie das erste Element überspringen? Sie sollten auch für jedes Element einen Fehler nach dem anderen haben, so als wäre Ihre Liste 1-indexiert anstatt 0-indexiert.

In der while-Schleife, die Sie iterieren nicht i es sei denn, es dem Index gleich ist, so dass Sie den Fall nie feststellen, dass i == index es sei denn index 0.

+0

Sentinals werden normalerweise als Elemente vor und nach dem ersten und letzten Element einer Datenstruktur verwendet, um die Logik zu vereinfachen, ohne so viele Null-Checks verwenden zu müssen. Unter der Annahme, dass ein Teil davon korrekt eingerichtet ist, sollte das startende sentinel.next das Indexelement 0 sein. – billie

+0

Ich denke, das ist der einzige Ort, wo der Fehler sein könnte, da die for-Schleife brechen und in Zeile 7 zurückkehren würde, wenn 'index' 0 ist. Es sei denn, ich verpasse etwas. – Bricky

+0

Ich denke, Sie haben recht, was mich zu der Annahme verleitet, dass es ein Fehler ist, die Daten entweder einzurichten oder zu interpretieren. – billie

Verwandte Themen