ich befinde mich gerade bei der Klausurenvorbereitung für ALDA in java und habe noch meine Probleme mit Listen. Siehe die Aufgabe unten:
Gegeben sei die Klasse IntList fur eine verkettete Liste von Integer-Zahlen.
Java:
publicclassNode{publicint value;publicNode next;publicNode(int v){
value = v;
next =null;}}publicclassIntList{privateNode head;privateNode tail;publicIntList(){
head =null;
tail = head;}}
Entwickeln Sie eine Java-Methode
Code:
boolean compArList(int[] a, IntList b)
die uberpruft, ob das Array a und die Liste b den gleichen Inhalt haben
(Ruckgabewert true). Beachten Sie, dass die verkettete Liste auch leer sein
kann.
Mir fehlt hier ein grundsätzlicher Ansatz, da ich durch eine Liste ja nur durch Travestieren komme und das array nur über eine Schleife (z.B. for-Schleife) durchlaufen kann. Daher weiß ich nicht, wie ich überprüfen kann, dass a == b.value ist?
Java:
publicvoidtraverseList(){//Liste durchlaufenfor(Node t = head; t!=null; t= t.next){visit(t.value);}
Wäre nett wenn mir jemand auf die Sprünge helfen könnte! Danke!
Du iterierst einfach ganz normal über das Array (for-each z.B.) und prüfst ob das int im Array != node.value ist. Am Anfang der Methode schreibst eeben einfach so etwas wie Node aktuellerKnoten = b.head;
Nach jedem Schleifendurchgang setzt du aktuellerKnoten auf den nächsten Knoten aktuellerKNoten = aktuellerKnoten.next; (oder getNext() oder wie auch immer du Zugriff darauf hast)
Grob so
Code:
Node node = b.head;
for (int i : a) {
if(i != node.value){
return false;
}
node = node.next;
}
return true;
Anfänglich wäre auch eine Überprüfung möglich um zu schauen ob beide Listen die gleiche Länge haben. Und danach wie meine beiden Vorposter schon gesagt haben eine einfache for Schleife
Anfänglich wäre auch eine Überprüfung möglich um zu schauen ob beide Listen die gleiche Länge haben. Und danach wie meine beiden Vorposter schon gesagt haben eine einfache for Schleife
Klar, wenn man irgendwo die Länge der Liste speichern würde dann ja
Aber hier könnte man auch einfach Nodes erstellen, die miteinander verbinden und in der Liste nur das head setzen! Die Liste wüsste also von der Größe gar nichts! (normal würde man das wohl anders machen, das stimmt wohl)
@Greenhorn:
Nein so nicht, überlege doch mal wie die Schleifen durchlaufen werden würden!
Grundsätzlich ja. Wenn nicht sichergestellt ist, dass in beiden Listen die Elemente in der selben Reihenfolge vorkommen (und Array und Liste, dann trotzdem als "gleich" angesehen werden) musst Du sie mit eine doppelten for Schleife durch laufen. Das return true ist hier aber nicht richtig.
Sollte funktionieren, wobei ich eher eine while als innere Schleife genommen hätte.
Du würdest halt hiermit jeden Wert aus dem Array gegen jeden Wert aus der Liste prüfen.
Das würde aber auch nicht zum gewünschten Ergebnis führen und grundsätzlich false zurückliefern -ausser alle Nodes in der Liste sind identisch bzw. haben alle den selben Wert.
Die Lösung setzt voraus, dass die Wert in Array und Liste in gleicher Reihenfolge vorkommen.
Komplizierter wird das ganze wenn die Werte in unterschiedlicher Reihenfolge und auch noch mehrfach vorkommen können - deshalb wären die genauen Randbedingungen recht interessant.
Okay ich starte nochmal einen Neuversuch mit der Lösung:
Java:
boolean compArList (int[] a,IntList b){boolean ende =false;int i =0;Node node = b.head;if(a.length !=0&& b.head !=null){while(!ende){if(a[i]== b.value){
ende =true;}else{
ende =false;}
a++;
b=b.next;}else{
ende =false;}return ende;}