Hallo,
ich bin gerade dabei, ein paar Aufgaben vor der Klausur (Programmierung I) zu lösen und wollte fragen, ob ihr mich bei meinen Lösungen auf Fehler hinweisen könntet.
Ich könnte eigentlich auch eine Liste erstellen und dann ein wenig rumtesten, aber dabei könnte ich ja etwas übersehen, also wäre es sehr nett, wenn ihr schnell einen Blick drüberwerfen könntet.
Also die Aufgabe lautet:
Implementieren Sie eine doppelt verkettete Liste mittels der Klassen Node und List. Die Liste soll Objekte vom Typ String speichern und folgende Methoden besitzen.
1. public void display(): gibt die gesamte Liste (d.h., den Inhalt aller Knoten) beginnend mit dem ersten Knoten auf der Konsole aus.
2. public void add(int i, String content): fügt den übergebenen String an Position i in die Liste ein.
3. public void remove(int pos): löscht das Element an Stelle i aus der Liste.
Zuerst die Klasse Node.
Da die Knoten ja doppelt verknüpft sein müssen, einmal prev und einmal next.
Dann habe ich noch die Methode toString() neu geschrieben, sodass ich den Inhalt der Knoten ausgeben kann und ich habe noch Getter und Setter für prev und next eingefügt.
Und die Klasse List.
Diese braucht ja einmal Zugriff auf den Anfang und auf das Ende.
Die erste Methode.
Wenn die Liste leer ist, wird das mitgeteilt und ansonsten sollte das so passen.
Dann die zweite Methode.
Hier frage ich mich, wenn die Liste leer ist, gibt es dann eine nullte Position? In dem Fall zeigen dann front und rear auf den selben Knoten
Ansonsten wird durchgelaufen und der Knoten eingefügt.
Und hier noch eine Frage, der letzte Knoten hat ja eine Nullpointer-Referenz, zählt diese auch als Position?
Wenn ja, würde ich sie aber auch nicht erreichen, weil ja nur die aktuelle Position abgefragt wird.
Und die letzte Methode.
Hier wird ja dann einfach der Knoten gelöscht, ich hoffe das passt.
ich bin gerade dabei, ein paar Aufgaben vor der Klausur (Programmierung I) zu lösen und wollte fragen, ob ihr mich bei meinen Lösungen auf Fehler hinweisen könntet.
Ich könnte eigentlich auch eine Liste erstellen und dann ein wenig rumtesten, aber dabei könnte ich ja etwas übersehen, also wäre es sehr nett, wenn ihr schnell einen Blick drüberwerfen könntet.
Also die Aufgabe lautet:
Implementieren Sie eine doppelt verkettete Liste mittels der Klassen Node und List. Die Liste soll Objekte vom Typ String speichern und folgende Methoden besitzen.
1. public void display(): gibt die gesamte Liste (d.h., den Inhalt aller Knoten) beginnend mit dem ersten Knoten auf der Konsole aus.
2. public void add(int i, String content): fügt den übergebenen String an Position i in die Liste ein.
3. public void remove(int pos): löscht das Element an Stelle i aus der Liste.
Zuerst die Klasse Node.
Da die Knoten ja doppelt verknüpft sein müssen, einmal prev und einmal next.
Dann habe ich noch die Methode toString() neu geschrieben, sodass ich den Inhalt der Knoten ausgeben kann und ich habe noch Getter und Setter für prev und next eingefügt.
Java:
public class Node {
String data;
Node next;
Node prev;
Node(String data) {
this.data = data;
next = null;
prev = null;
}
public String toString() {
return "{" + data + "} ";
}
public void setNextNode(Node n) {
this.next = n;
}
public Node getNextNode() {
return next;
}
public void setPrevNode(Node n) {
this.prev = n;
}
public Node getPrevNode() {
return prev;
}
}
Und die Klasse List.
Diese braucht ja einmal Zugriff auf den Anfang und auf das Ende.
Java:
public class List {
Node front;
Node rear;
List(Node a, Node b) {
this.front = a;
this.rear = b;
}
public boolean isEmpty() {
return front == null;
}
Die erste Methode.
Wenn die Liste leer ist, wird das mitgeteilt und ansonsten sollte das so passen.
Java:
public void display() {
if(front == null) {
System.out.println("The list is empty");
} else {
for (Node it = front; it != null; it = it.next) {
System.out.println(it);
}
}
}
Dann die zweite Methode.
Hier frage ich mich, wenn die Liste leer ist, gibt es dann eine nullte Position? In dem Fall zeigen dann front und rear auf den selben Knoten
Ansonsten wird durchgelaufen und der Knoten eingefügt.
Und hier noch eine Frage, der letzte Knoten hat ja eine Nullpointer-Referenz, zählt diese auch als Position?
Wenn ja, würde ich sie aber auch nicht erreichen, weil ja nur die aktuelle Position abgefragt wird.
Java:
public void add(int i, String content) {
if(front == null && i == 0) {
Node newNode = new Node(content);
front = newNode;
rear = newNode;
} else {
Node it = front;
int actPos;
for (actPos = 0; it != null && actPos <i; actPos++) {
it = it.next;
}
if(actPos == i) {
Node newNode = new Node(content);
newNode = it;
it.prev = newNode;
} else {
System.out.println("There is no positon" + i + " in this list");
}
}
}
Und die letzte Methode.
Hier wird ja dann einfach der Knoten gelöscht, ich hoffe das passt.
Java:
public void remove(int pos) {
if(front == null) {
System.out.println("There is no position" + pos + " in this list");
} else {
Node it = front;
int actPos;
for (actPos = 0; actPos < pos && it != null; actPos++ ) {
it = it.next;
}
if(actPos == pos) {
rear = it.prev;
it.prev.next = null;
}
}
}
}
Zuletzt bearbeitet: