Hallo!
Ich möchte eine doppelt verkettete Liste rückwärts ausgeben lassen, bekomme aber immer eine nullpointerexeption und kann den Fehler nicht finden.
Kann mir vielleicht jemand weiterhelfen???
gruß laola
Ich möchte eine doppelt verkettete Liste rückwärts ausgeben lassen, bekomme aber immer eine nullpointerexeption und kann den Fehler nicht finden.
Kann mir vielleicht jemand weiterhelfen???
gruß laola
Code:
public class SortedListDeluxe{
private class Node {
Object content; Node next; Node prev;
Node(Object o){ content = o; next = null; prev=null;}
}
private int count;
public Node first, cursor;
public SortedListDeluxe(){
this.count = 0; first = cursor = null;
}
// sucht nach dem groessten Element, das kleiner als el ist
private Node search(Comparable el){
Node tmp = first;
if (count == 0) return null; // leere Liste
if (el.compareTo(tmp.content) < 0) return null;
while (tmp.next != null && el.compareTo(tmp.next.content) > 0)
tmp = tmp.next;
return tmp;
}
public void insertElement(Comparable el){
Node n = new Node((Object)el);
Node tmp = search(el);
if ( tmp == null) {
n.next = first;
first = n;
n.prev=null;
} else {
n.next = tmp.next;
tmp.next = n;
first.prev=n;
}
count++;
}
public boolean remove(Object o){
if(first==null){
return false;
}
Node aktuell=first;
Node vorher=null;
while(aktuell!=null){
if(o.equals(aktuell.content)) {
count--;
if(vorher==null){
first=aktuell.next;
return true;
}else{
vorher.next=aktuell.next;
return true;
}
}
vorher=aktuell;
aktuell=aktuell.next;
}
return false;
}
public int length() { return count; }
public boolean end() {
if(cursor.next==null) {
return true;
} else {
return false;
}
}
public void printRek() {printRek(first);}
public void printRek(Node x) {
if (x != null) {
printRek(x.next);
System.out.println(x);
}
}
//Rückwärtsausgeben funktioniert nicht und ich kann den fehler nicht finden ich hab reverse doch richtig aufgerufen, oder???
StringBuffer sb;
public void reverse(boolean first, Node x){
if(x==null) return;
if (x!=null) reverse(false,x.next);
sb.append(x.content.toString());
if(!first)sb.append( ", ");
}
public String toString() {
String Ausgabe;
StringBuffer sb = new StringBuffer(); //
sb.append("(");
reverse(true, first) ;
sb.append(")");
Ausgabe=sb.toString();
return Ausgabe;
}
/** Vorwärtsausgeben funktioniert
public String toString() {
StringBuffer sb = new StringBuffer(); //
sb.append("(");
Node x = first;
while ( x != null ) {
sb.append(x.content.toString());
x = x.next;
if ( x != null ) sb.append(", ");
}
sb.append(")");
return sb.toString();
}
**/
}