Hallo zusammen!
Ich habe eine doppelt verkettete Liste implementiert. Ich mache das als Übung für mich, dementsprechend habe ich keine Fehlereingaben etc. berücksichtigt. Und habe nun aber das Problem mit der Methode swap(). Sie soll zwei Elemente vertauschen und als Parameter bekommt sie die Positionen der Elemente. Mit der Methode isThere() finde ich nach vorgegebener Position das entsprechende Element. Also bei Testausgaben in der Methode swap() passt alles die Elemente sind so wie sein sollen jeweils das nächste und auch nach dem Vertauschen. Die Listenausgabe nach dem Vertauschen stimmt aber nicht. Weiß jemand vllt wo der Fehler liegen könnte? Vielen Dank, da ist der ganze Code:
Ich habe eine doppelt verkettete Liste implementiert. Ich mache das als Übung für mich, dementsprechend habe ich keine Fehlereingaben etc. berücksichtigt. Und habe nun aber das Problem mit der Methode swap(). Sie soll zwei Elemente vertauschen und als Parameter bekommt sie die Positionen der Elemente. Mit der Methode isThere() finde ich nach vorgegebener Position das entsprechende Element. Also bei Testausgaben in der Methode swap() passt alles die Elemente sind so wie sein sollen jeweils das nächste und auch nach dem Vertauschen. Die Listenausgabe nach dem Vertauschen stimmt aber nicht. Weiß jemand vllt wo der Fehler liegen könnte? Vielen Dank, da ist der ganze Code:
Java:
class Element{
Element prev;
Element next;
String daten;
Element (Element prev, Element next, String daten){
this.prev=prev;
this.next=next;
this.daten=daten;
}
void setPrev(Element prev){
this.prev=prev;
}
void setNext(Element next){
this.next=next;
}
Element getPrev(){
return this.prev;
}
Element getNext(){
return this.next;
}
void setDaten(String daten){
this.daten=daten;
}
String getDaten(){
return this.daten;
}
}
public class List {
Element first=null;
Element last=null;
Element curr=null;
void insert(String daten){
if(first==null){
first=new Element(null,null,daten);
curr=first;
}else if(curr.getNext()==null){
last=new Element(curr,null,daten);
curr.setNext(last);
curr=last;
}
}
void insertAtBefore(int pos, String daten){
int i=1;
Element pivot=first;
while(i<=pos&&pivot!=null){
if(i==pos&&pivot.getPrev()==null){
curr=new Element(null,pivot,daten);
pivot.setPrev(curr);
first=curr;
}else
if (i==pos){
curr=new Element(pivot.getPrev(),pivot,daten);
Element pivotVor=pivot.getPrev();
pivotVor.setNext(curr);
pivot.setPrev(curr);
}
i++;
pivot=pivot.getNext();
}
}
void insertAtAfter(int pos, String daten){
int i=1;
Element pivot=first;
while(i<=pos&&pivot!=null){
if(i==pos&&pivot.getNext()==null){
curr=new Element(pivot,null,daten);
pivot.setNext(curr);
last=curr;
}else
if (i==pos){
curr=new Element(pivot,pivot.getNext(),daten);
Element pivotNext=pivot.getNext();
pivotNext.setPrev(curr);
pivot.setNext(curr);
}
i++;
pivot=pivot.getNext();
}
}
void delete(int pos){
int i=1;
Element pivot=first;
while(i<=pos&&pivot!=null){
if(i==pos){
Element prevP=pivot.getPrev();
Element nextP=pivot.getNext();
prevP.setNext(nextP);
nextP.setPrev(prevP);
pivot.daten=null;
}
i++;
pivot=pivot.getNext();
}
}
int length(){
int length=0;
curr=first;
while(curr!=null){
curr=curr.getNext();
length++;
}
return length;
}
Element isThere(int pos){
int i=1;
Element pivot=first;
int max=length();
while(i<=max){
if(i==pos)
break;
i++;
pivot=pivot.getNext();
}
return pivot;
}
void showElement(int pos){
curr=isThere(pos);
if(curr!=null)
System.out.println("Das Element hat daten: "+curr.getDaten());
else
System.out.println("Nema go");
}
void swap(int pos1, int pos2){
Element swap1=isThere(pos1);
//System.out.println(swap1.getPrev().daten);
Element swap2=isThere(pos2);
curr=swap1;
curr.setDaten(swap1.getDaten());
curr.setNext(swap1.getNext());
curr.setPrev(swap1.getPrev());
//swap1.daten=swap2.daten;
swap1=swap2;
//System.out.println(swap1.daten);
swap1.setDaten(swap2.getDaten());
swap1.setNext(swap2.getNext());
swap1.setPrev(swap2.getPrev());
swap2=curr;
swap2.setDaten(curr.getDaten());
swap2.setNext(curr.getNext());
swap2.setPrev(curr.getPrev());
//System.out.println(swap1.getPrev().daten);
}
void ausgabe(){
curr=first;
while(curr!=null){
System.out.println(curr.daten);
curr=curr.getNext();
}
System.out.println();
}
void rueckAusgabe(){
curr=last;
while(curr!=null){
System.out.println(curr.daten);
curr=curr.getPrev();
}
System.out.println();
}
public static void main(String[] args)
{
List l=new List();
for (int i=1; i<8; i++){
l.insert("Element "+i);
}
//l.ausgabe();
// l.rueckAusgabe();
//l.insertAtBefore(1,"Element proba");
//l.ausgabe();
//l.rueckAusgabe();
//l.insertAtAfter(8,"Element proba2");
//l.delete(3);
//l.ausgabe();
//l.rueckAusgabe();
//l.showElement(3);
l.swap(2,3);
l.ausgabe();
l.rueckAusgabe();
}
}