HI, ich habe nach 2 tagen arbeit nun eine Lösung gefunden. Funktioniert glaub ich alles. Hab jedenfalls alles positiv getestet, aber so ganz sicher bin ich nicht.
Wäre euch sehr dankbar, wenn ihr mal über mein Code schauen könntet und mir sagen könntet ob die Folgenden Anforderungen erfüllt sind. Ich weiß dauert vielleicht etwas länger, aber wäre echt wichtig für mich! Danke schon mal im Voraus!
1. doppelt verkettet
2. verweis auf das erste Element
3. verweis auf das letzte Element
4. Methode lastElement, die das letzte Element liefert.
Also, was mich so unsicher macht, wenn ich zB in der Methode firstElement zusärtlich noch ne Ausgabe mit System.out.println("Ab first: " + first.next); gibt er mir ja die ganze List aus, wenn ich jetzt aber bei lastElement das Gleiche machen will, also System.out.println("Vor last: " + last.prev); gibt er mir immer nur den letzten und den Vorgänger eben so wies da steht aus, aber nich die komplette Liste vor dem letzten Element. Liegt das vielleicht an der toString() Methode oder is das ein Zeichen das die doppelt Verkettung doch noch nich so ganz ok ist?
Hier mal der Code:
Danke euch für eure Mühen!
Gruß!
Wäre euch sehr dankbar, wenn ihr mal über mein Code schauen könntet und mir sagen könntet ob die Folgenden Anforderungen erfüllt sind. Ich weiß dauert vielleicht etwas länger, aber wäre echt wichtig für mich! Danke schon mal im Voraus!
1. doppelt verkettet
2. verweis auf das erste Element
3. verweis auf das letzte Element
4. Methode lastElement, die das letzte Element liefert.
Also, was mich so unsicher macht, wenn ich zB in der Methode firstElement zusärtlich noch ne Ausgabe mit System.out.println("Ab first: " + first.next); gibt er mir ja die ganze List aus, wenn ich jetzt aber bei lastElement das Gleiche machen will, also System.out.println("Vor last: " + last.prev); gibt er mir immer nur den letzten und den Vorgänger eben so wies da steht aus, aber nich die komplette Liste vor dem letzten Element. Liegt das vielleicht an der toString() Methode oder is das ein Zeichen das die doppelt Verkettung doch noch nich so ganz ok ist?
Hier mal der Code:
Code:
public class List implements ADTList {
//Zeiger auf das erste Element
private Listenelement first;
private Listenelement last;
//Speichert die laenge der Liste/Anzahl der Elemente
private int length;
/**
* Konstruktor
* erstellt eine neue Lise
* */
public List() {
first = null;
last = null;
length = 0;
}
/**
* Lokale Klasse Listenelemet erstellt neue Listenelemente
* */
class Listenelement {
Listenelement next;
Element wert;
Listenelement prev;
//next ist vorhergegangenes / this.next wird das
Listenelement(Listenelement next, Element x, Listenelement prev) {
this.next = next;
this.wert = x;
this.prev = prev;
}
public String toString() {
return " -> " + wert + (next == null ? " |- " : next.toString());
}
}
/**
* Fuegt ein neues Element am Anfang der Liste ein
* @param Element x
* */
public void insert(Element x) {
first = new Listenelement(first, x, last);
if(first.next == null) {
last = first;
}
length++;
}
/**
* Fuegt ein neues Element am Ende der Liste ein
* @param Element x
* */
public void append(Element x){
if(isEmpty()) {
insert(x);
}
else {
Listenelement p = first;
for(; p.next != null; p = p.next);
p.next = new Listenelement(null, x , last);
last = p.next;
length++;
}
}
/**
* Liefert die Laenge der Liste
* @return int lenght
* */
public int length() {
return length;
}
/**
* Ist die Liste leer?
* @return boolean
* */
public boolean isEmpty() {
return first == null;
}
/**
* Liefert das erste Element in der Liste
* * @return Element last
* */
public Element firstElement() {
if(isEmpty()) {
return null;
}
else {
return first.wert;
}
}
/**
* Liefert das letzte Element in der Liste
* @return Element last
* */
public Element lastElement() {
if(isEmpty()) {
return null;
}
else {
return last.wert;
}
}
/**
* Ist das Element in der Liste?
* @param Element x
* */
public boolean isInList(Element x){
Listenelement p = first;
while(p != null) {
if(p.wert.equals(x)) {
return true;
}
p = p.next;
}
return false;
}
/**
* Entfernt ausgewähltes Element
* @param Element x
* */
public void delete(Element x){
if(isInList(x)){
length--;
if(first.wert.equals(x)) {
first = first.next;
}
else {
Listenelement p = first, q = first.next;
while(!q.wert.equals(x)) {
p = q;
q = q.next;
}
p.next = q.next;
}
if(last.wert.equals(x)) {
last = last.prev;
}
}
}
/**
* Entfernt das erste Element aus der Liste
* */
public void delete() {
if(!isEmpty()) {
delete(firstElement());
}
}
public String toString() {
return(isEmpty() ? " Liste isEmpty " : first.toString());
}
}
Danke euch für eure Mühen!
Gruß!