Hallo,
ich habe Probleme bei der Implementierung einer doppelt verketteten Liste. Ich studiere an der Fernuni Hagen und habe eigentlich so ziemlich alles aus dem Skript abgeschrieben.
Wenn ich allerdings Main.java ausführe, bekomme ich eine Exception:
Exception in thread "main" java.lang.NullPointerException
at List.insert(List.java:43)
at Main.main(Main.java:7)
Offensichtlich liegt das daran, dass isempty() nicht richtig funktioniert.
Ich verstehe auch nicht, warum front() einfach return this; zurückgeben soll. Damit wird doch die Listenklasse zurückgegeben und nicht das erste Element?
Und schon gar nicht verstehe ich, wie der last-Zeiger gesetzt werden soll.
Hier ist der Code:
Main.java:
List.java:
Elem.java:
Pos.java:
ich habe Probleme bei der Implementierung einer doppelt verketteten Liste. Ich studiere an der Fernuni Hagen und habe eigentlich so ziemlich alles aus dem Skript abgeschrieben.
Wenn ich allerdings Main.java ausführe, bekomme ich eine Exception:
Exception in thread "main" java.lang.NullPointerException
at List.insert(List.java:43)
at Main.main(Main.java:7)
Offensichtlich liegt das daran, dass isempty() nicht richtig funktioniert.
Ich verstehe auch nicht, warum front() einfach return this; zurückgeben soll. Damit wird doch die Listenklasse zurückgegeben und nicht das erste Element?
Und schon gar nicht verstehe ich, wie der last-Zeiger gesetzt werden soll.
Hier ist der Code:
Main.java:
Java:
public class Main
{
public static void main(String[] args)
{
List l1 = new List();
l1.insert(l1.front(), new Elem(5.32, 1));
Pos iterator = l1.front;
while(!l1.eol(iterator))
{
iterator = l1.next(iterator);
}
}
}
List.java:
Java:
public class List extends Pos
{
public Pos front, last;
public Pos front()
{
return this;
}
public boolean isempty()
{
return (front() == null);
}
public List empty()
{
return null;
}
public Pos next(Pos p)
{
return p.succ;
}
public boolean bol(Pos p)
{
return (front() == p);
}
public boolean eol(Pos p)
{
return (this.last == p);
}
public List insert(Pos p, Elem el)
{
Pos q = new Pos();
q.value = el;
if(!(eol(p) || isempty()))
{
q.pred = p;
q.succ = p.succ;
p.succ.pred = q;
p.succ = q;
}
else
{
q.pred = p;
q.succ = null;
p.succ = q;
pred = q; // Last-Zeiger aendern
}
return this;
}
public List delete(Pos p)
{
Pos q;
if(!isempty())
{
if(eol(p))
{
if(p == this.front)
{
last = null;
p.succ = null;
}
else
{
q = this.front;
while(q.succ != p) q = q.succ;
last = q;
p.succ = null;
}
}
else
{
q = p.succ;
if(q == last) last = p;
p.succ = p.succ.succ;
}
}
return this;
}
}
Elem.java:
Java:
public class Elem
{
double coeff;
int exp;
Elem(double i, int j)
{
this.coeff = i;
this.exp = j;
}
public double getCoeff()
{
return this.coeff;
}
}
Pos.java:
Java:
public class Pos
{
Elem value;
Pos pred, succ;
public Elem getValue()
{
return this.value;
}
}
Zuletzt bearbeitet von einem Moderator: