G
Gast
Gast
Hallo,
habe folgendes Problem: Soll für eine HA ein Abstrakten Datentyp selbst erstellen der eine verkettete Liste bearbeitet.
Um dies zu machen wurde mir ein Interface zur verfügung gestellt. In diesem ist neben den Mehoden noch eine Unterklasse namens Node. Diese Unterklasse soll in die meine Hauptklasse LinkedList eingebunden werden und sieht dann so aus:
Nun zu meiner Frage. Ich versteh nicht ganz wie ich in meiner Klasse namens LinkedList mit der oben gezeigten protected Klasse die Methoden bearbeiten muss, welche als Ein- oder Ausgabe ein Objekt von dem Typ Node brauchen, da es diesen Typ ja in der Klasse gar nicht gibt. Casten funktioniert zwar aber ist glaub ich nicht grad die richtige Lösung, da ich zb in der main- Methode die insert- Funktion damit ja nicht richtig ausführen kann.
Im Anhang noch mein Code, den ich bis jetzt geschafft hab. Habe jetzt schon mind. 5 Std damit verbracht und bin nicht gerade weit gekommen. Also bitte melden! DANKE!
:cry:
habe folgendes Problem: Soll für eine HA ein Abstrakten Datentyp selbst erstellen der eine verkettete Liste bearbeitet.
Um dies zu machen wurde mir ein Interface zur verfügung gestellt. In diesem ist neben den Mehoden noch eine Unterklasse namens Node. Diese Unterklasse soll in die meine Hauptklasse LinkedList eingebunden werden und sieht dann so aus:
Code:
protected static class ListNode implements List.Node{
public int data; //die gespeicherte Ganzzahl
public ListNode next; //naechster Knoten der verketteten Liste
public int getData() {return data;}
}
Die Methoden sehen dann aber zb wie folgt aus (Auszug aus Interface):
public interface List {
// Das Interface fuer Listeneintraege. Da die Listenstruktur von aussen
// nicht veraendert werden soll, exponieren wir nur dieses Interface.
public interface Node {
public int getData();
}
// Erstellt einen neuen Listeneintrag fuer das Element a und fuegt
// ihn am Kopf der Liste hinzu.
public void add(int a);
// Erstellt einen neuen Listenknoten f"ur und f"ugt ihn nach n in der Liste
// ein.
public void insert(Node n, int a);
// Findet das erste Vorkommen einer Node in der Liste und gibt eine
// Referenz auf den jeweiligen Listeneintrag zurueck (oder null,
// wenn es nicht enthalten ist).
public Node find(int a);
// Findet das erste Vorkommen eines Werts und entfernt den
// entsprechenden Listeneintrag aus der Liste.
public void remove(int a);
// Entfernt den Listeneintrag aus der Liste.
public void remove(Node e);
// Gibt den ersten Eintrag der Liste zurueck.
public Node getFirst();
// Gibt den Listeneintrag zurueck, der Nachfolger von e ist.
public Node getNext(Node e);
Nun zu meiner Frage. Ich versteh nicht ganz wie ich in meiner Klasse namens LinkedList mit der oben gezeigten protected Klasse die Methoden bearbeiten muss, welche als Ein- oder Ausgabe ein Objekt von dem Typ Node brauchen, da es diesen Typ ja in der Klasse gar nicht gibt. Casten funktioniert zwar aber ist glaub ich nicht grad die richtige Lösung, da ich zb in der main- Methode die insert- Funktion damit ja nicht richtig ausführen kann.
Im Anhang noch mein Code, den ich bis jetzt geschafft hab. Habe jetzt schon mind. 5 Std damit verbracht und bin nicht gerade weit gekommen. Also bitte melden! DANKE!
Code:
//import List.Node;
public class LinkedList implements List{
LinkedList.ListNode kopf;
LinkedList.ListNode pos;
boolean first = true;
protected static class ListNode implements List.Node{
public int data; //die gespeicherte Ganzzahl
public ListNode next; //naechster Knoten der verketteten Liste
public int getData() {return data;}
}
public LinkedList( ) {
kopf = pos = new ListNode();
kopf.next = null;
}
public void add(int a)
{
ListNode element = new ListNode();
element.data = a;
if(first == true)
{
element.next = kopf;
first = false;
}
element.next = pos.next;
pos.next = element;
}
public void insert(Node n, int a)
{
if(n != null)
{
ListNode element = new ListNode();
element.data = a;
element.next = (ListNode) n;
}
}
public Node find(int a)
{
ListNode beginn = pos;
do
{
if(beginn.data == a)
return beginn;
else
beginn = beginn.next;
}while(beginn.next != null);
return null;
}
public void remove(int a)
{
}
public void remove(Node e)
{
}
public Node getFirst()
{
return null;
}
public Node getNext(Node e)
{
}
public Node getLast()
{
}
public Node getPrevious(Node e)
{
}
public int size()
{
int zaehler = 0;
ListNode beginn = pos;
while(beginn.next != null)
{
beginn = beginn.next;
zaehler++;
}
return zaehler;
}
public String toString()
{
String str="";
str = str + kopf.data;
return str;
}
public static void main(String[] args) {
LinkedList list1 = new LinkedList();
Node n = new ListNode();
list1.add(5);
list1.add(3);
list1.add(4);
list1.insert(n, 8);
//System.out.println(list1.toString());
System.out.println(list1.size());
System.out.println(list1.find(3));
}
}