C
Christian_1986
Gast
Hallo zusammen, ich habe eine Frage zu Listen in Java.
Ich habe hier einen Code, mit dem man Listen erstellen kann.
Ein Beispiel ist in der Main funktion.
Man macht eine neue Liste mit
ConsList l = new ConsList();
und kann dann Sachen einfügen z.B:
l.insert("Hallo")
l.insert("DU!!!")
und dann die liste mit
print(l) ausgeben.
Wie gesagt in der main Funktion sind dazu Beispiele.
Ich verstehe die Methode insert nicht.
Dort wird erst eine neue Zelle angelegt, mit dem Inhalt, den man
übergibt.
Cons cons = new Cons(obj);
Dann wird diese Zelle auf head zeigen. Also prinzipiell zeigt dann jede
Zelle auf Head.
Head aber wird im nächsten Schrit gleich cons gesetzt.
Da alle Zellen auf head zeigen, head gleich cons gesetzt wird und cons
der Inhalt der letzten Zelle ist, heißt das doch alle Zellen zeigen auf
die letzte.
Aber wo ist da der Sinn? Das kann doch so garnicht verstanden werden!?
Es wäre schön, wenn ihr mir helfen könntet
Danke
Ich habe hier einen Code, mit dem man Listen erstellen kann.
Ein Beispiel ist in der Main funktion.
Man macht eine neue Liste mit
ConsList l = new ConsList();
und kann dann Sachen einfügen z.B:
l.insert("Hallo")
l.insert("DU!!!")
und dann die liste mit
print(l) ausgeben.
Wie gesagt in der main Funktion sind dazu Beispiele.
Ich verstehe die Methode insert nicht.
Dort wird erst eine neue Zelle angelegt, mit dem Inhalt, den man
übergibt.
Cons cons = new Cons(obj);
Dann wird diese Zelle auf head zeigen. Also prinzipiell zeigt dann jede
Zelle auf Head.
Head aber wird im nächsten Schrit gleich cons gesetzt.
Da alle Zellen auf head zeigen, head gleich cons gesetzt wird und cons
der Inhalt der letzten Zelle ist, heißt das doch alle Zellen zeigen auf
die letzte.
Aber wo ist da der Sinn? Das kann doch so garnicht verstanden werden!?
Es wäre schön, wenn ihr mir helfen könntet
Danke
Code:
public class Cons
{
public Object obj; // das Objekt in dieser Zelle
public Cons next; // Verweis auf die naechste Zelle
public Cons(Object obj) {
this.obj = obj;
next = null;
}
}
public class ConsList
{
private Cons head, foot; // Kopf und Fuss der Liste
public ConsList() { head = foot = null; /* neue leere Liste */ }
public boolean contains(Object obj) { return contains(head, obj); }
protected boolean contains(Cons cons, Object obj) {
if (cons == null) return false;
else if (cons.obj == obj) return true;
else return contains(cons.next, obj);
}
public void print() {
System.out.print("Liste [");
print(head); // rekursive Ausgabe der Cons-Zellen
System.out.println("]");
}
protected void print(Cons cons) {
if (cons == null) return ; // letzte Zelle erreicht
System.out.print(cons.obj); // Objekt ausgeben
if (cons.next != null) {
System.out.print(", ");
print(cons.next); // Rekursiv weiter
}
}
public void insert(Object obj) {
Cons cons = new Cons(obj); // neue Cons-Zelle
cons.next = head; // vorne anfuegen..
head = cons; // .. und Kopf der Liste anpassen
if (foot == null) foot = cons; // eventuell auch den Fuss
}
public void append(Object obj) {
Cons cons = new Cons(obj); // neue Cons-Zelle
if (foot == null) head = foot = cons; // genau eine Cons-Zelle
else { // hinten anfuegen und Fuss anpassen
foot.next = cons;
foot = cons;
}
}
public void remove(Object obj) {
if (head == null) return ;
if (head.obj == obj) {
if (head == foot) foot = head = null;
else head = head.next; // erste Cons-Zelle entfernen
} else remove(head, head.next, obj);
}
protected void remove(Cons prev, Cons cons, Object obj) {
if (cons == null) return ;
if (cons.obj == obj) {
// vorherige Cons-Zelle auf Nachfolgende zeigen lassen,
// somit faellt 'cons' aus der Liste
prev.next = cons.next;
if (foot == cons) // evtl. Fuss anpassen
foot = prev;
} else remove(cons, cons.next, obj);
}
public boolean isEmpty() { return head == null; }
public Object removeHead() {
if (head == null) return null;
Object res = head.obj;
if (head == foot) head = foot = null;
else head = head.next;
return res;
}
public static void main (String ... args) {
// Kleines Testprogramm fuer Listen:
ConsList l = new ConsList();
System.out.println("leer? " + l.isEmpty());
String s1 = "Hallo", s2 = "Welt";
l.insert(s1);
System.out.println("leer? " + l.isEmpty());
l.print();
l.insert(s2);
l.print();
l.remove(s2);
l.print();
l.append(s2);
l.print();
l.remove(s2);
l.remove(s1);
l.print();
System.out.println("leer? " + l.isEmpty());
}
}