Linked list, Methode zum Vertauschen von Elementen

gogcho

Mitglied
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:

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();

 }



}
 

httpdigest

Top Contributor
Wozu braucht man denn bitte eine "current" Variable in einer Liste? Was soll die denn tun?
Das sieht fast so aus, als wäre das einfach nur eine Hilfsvariable, die du in den Methoden verwendest. Du solltest diese dann aber auch nur in den Methoden deklarieren.
Und lerne bitte den Keyboard-Shortcut für "Quellcode formatieren" in deiner IDE...
 

gogcho

Mitglied
Ja es ist compiler für Handy. Stimmt es ist Hilfsvariable, werde ich bearbeiten.

Wozu braucht man denn bitte eine "current" Variable in einer Liste? Was soll die denn tun?
Das sieht fast so aus, als wäre das einfach nur eine Hilfsvariable, die du in den Methoden verwendest. Du solltest diese dann aber auch nur in den Methoden deklarieren.
Und lerne bitte den Keyboard-Shortcut für "Quellcode formatieren" in deiner IDE...
 

lennero

Bekanntes Mitglied
Ich würde einfach die Daten tauschen statt mit Referenzen herumzuhantieren. Also, finde beide Elemente, tausche e1.data und e2.data. Fertig.
 

gogcho

Mitglied
Ich würde einfach die Daten tauschen statt mit Referenzen herumzuhantieren. Also, finde beide Elemente, tausche e1.data und e2.data. Fertig.
Ja das dachte ich mir auch, wollte aber hinkriegen, dass ich die Elemente selber tausche. Setten ist auch eigentlich nicht notwendig, da die Referenzen auf next, prev beibehalten bleiben, habe ich in dem Fall aus Sicherheit noch mal ausprobiert
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Wenn du die Elemente selbst tauschen/umhängen willst, dann so:
Java:
  void swap(int pos1, int pos2) {
    Element swap1 = isThere(pos1);
    Element swap2 = isThere(pos2);
    if (swap1.prev != null)
      swap1.prev.next = swap2;
    if (swap2.prev != null)
      swap2.prev.next = swap1;
    if (swap1.next != null)
      swap1.next.prev = swap2;
    if (swap2.next != null)
      swap2.next.prev = swap1;
    Element e = swap1.prev;
    swap1.prev = swap2.prev;
    swap2.prev = e;
    e = swap1.next;
    swap1.next = swap2.next;
    swap2.next = e;
  }
 

httpdigest

Top Contributor
Dann ist entweder die von dir genutzte IDE totaler Schrott oder du hast einen Syntaxfehler irgendwo. Ich nehme mal an, dass es ein Compilerfehler und kein Laufzeitfehler ist.
 

gogcho

Mitglied
Also ich bekomme am Rechner bei Rückwärtsausgabe eine endlose Schleife auf swap1, also das erste Element, das auszutauschen ist. Kann es sein, dass es auf sich selbst zeigt irgendwo? Ich sehe das nicht
 

gogcho

Mitglied
Java:
if(curr.prev.daten==curr.daten)
break;
so lässt sich die endlose Rückwärtsausgabeschleife bremsen in der Methode rueckAusgabe(). Also der Handycompiler war nicht Schuld ;)
 

gogcho

Mitglied
Ich hab den Fehler gefunden. Wenn man zwei benachbarte Elemente vertauschen will, dann zeigt das zweite bei Rückwärtsausgabe immer auf sich selbst..
 

gogcho

Mitglied
Java:
swap1.prev.next=swap2;
swap2.prev.next=swap1;

Element e=swap1.prev;
swap1.prev=swap2.prev;
swap2.prev=e;

swap1.next.prev=swap2;
swap2.next.prev=swap1;

e = swap1.next;
swap1.next=swap2.next;
swap2.next=e;

Das ist jetzt der funktionierende Code. Man soll es richtungsweise machen, weil sonst sich die Referenzen in einer der Richtungen überschneiden wenn man zwei benachbarte Elemente vertauschen möchte. Der Fall, dass swap1 first bzw. swap2 last ist, ist jetzt hier nicht berücksichtigt. Danke für die Hilfe !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Linked List set-Methode Java Basics - Anfänger-Themen 2
T KlausurÜbung- Förderband-Linked List Java Basics - Anfänger-Themen 53
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
S Methoden Linked List Methoden können nicht aufgerufen werden Java Basics - Anfänger-Themen 1
L Linked List - Array List Java Basics - Anfänger-Themen 2
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
G Linked List Programm add Problem Java Basics - Anfänger-Themen 5
S Synchronisieren einer Linked List Java Basics - Anfänger-Themen 16
E Linked List generisch Java Basics - Anfänger-Themen 5
H Linked List sortieren Java Basics - Anfänger-Themen 9
B Linked-List Java Basics - Anfänger-Themen 2
T einfügen bei einer Linked List Java Basics - Anfänger-Themen 8
J linked list add ? Java Basics - Anfänger-Themen 2
J linked list Java Basics - Anfänger-Themen 13
M Beispiel für Linked List Java Basics - Anfänger-Themen 9
G Linked List mit Interface erstellen Java Basics - Anfänger-Themen 10
N Linked list sortieren Java Basics - Anfänger-Themen 8
K Java Linked List Java Basics - Anfänger-Themen 11
W löschen in einer single linked list Java Basics - Anfänger-Themen 3
M Linked List schreiben und lesen Java Basics - Anfänger-Themen 4
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
G (Linked)HashMap sortieren Java Basics - Anfänger-Themen 1
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
J Array.list vergleichen Java Basics - Anfänger-Themen 1
B Vektor vs List Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
L Datentypen Array List Java Basics - Anfänger-Themen 9
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
W Stream Array List - Frage Java Basics - Anfänger-Themen 5
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
X Array List geordnet ausgeben. (JSF und JAVA) Java Basics - Anfänger-Themen 1
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
Yjuq Generic Methode - Wie muss die List Definition aussehen? Java Basics - Anfänger-Themen 3
M List<String> auswählen Java Basics - Anfänger-Themen 42
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
B ENUM to List<String> konvertieren Java Basics - Anfänger-Themen 2
E Array-list mit einer bestimmten Länge Java Basics - Anfänger-Themen 17
B Sorting List und Remove Java Basics - Anfänger-Themen 2
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
M Methode überladen - Array List Java Basics - Anfänger-Themen 5
L LIST.ADD Java Basics - Anfänger-Themen 2
M XWPF - Bullet Point list erstellen Java Basics - Anfänger-Themen 1
I <List> sortieren Java Basics - Anfänger-Themen 2
N Klassen List-Art Java Basics - Anfänger-Themen 5
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
F .csv Export aus einer list Java Basics - Anfänger-Themen 25
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
T List und ArrayList Java Basics - Anfänger-Themen 3
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
T Datentypen InputStream to list of Int (or similar) Java Basics - Anfänger-Themen 4
D Input/Output CSV Parser list unvollständig Java Basics - Anfänger-Themen 25
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
U JAXB - List wird nicht ausgefüllt Java Basics - Anfänger-Themen 1
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D Bestimmten Wert aus Array List ausgeben Java Basics - Anfänger-Themen 7
V Personenverwaltung mit List<>, falsche Ausgaben Java Basics - Anfänger-Themen 5
M List befüllen Java Basics - Anfänger-Themen 3
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
P Anlegen und Abfragen von Array List Java Basics - Anfänger-Themen 4
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
A Wie nutze ich List<List<String>> Java Basics - Anfänger-Themen 4
M Endlos schleife in List Java Basics - Anfänger-Themen 5
P Zufallszahlen ohne zahlen einer List Java Basics - Anfänger-Themen 21
C Array List mit String vergleichen und Fehlermeldung ausgeben Java Basics - Anfänger-Themen 6
S Probleme bei Ausgabe von rekursiver Methode (List) Java Basics - Anfänger-Themen 16
T Tabstopp in AWT-List? Java Basics - Anfänger-Themen 8
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
A List mit integern füllen Java Basics - Anfänger-Themen 4
D sortieren von List<> Java Basics - Anfänger-Themen 2
B List - Drag&Drop Java Basics - Anfänger-Themen 8
C List Abfragenproblem Java Basics - Anfänger-Themen 3
J List als anonyme Klasse Java Basics - Anfänger-Themen 9
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
F Wozu braucht man array list? Java Basics - Anfänger-Themen 29
T Collections Wie funktioniert List() ? Java Basics - Anfänger-Themen 7
Kenan89 Java Date List Java Basics - Anfänger-Themen 4
tux20 Problem beim Schreiben von List to File Java Basics - Anfänger-Themen 2
K Frage Set List Java Basics - Anfänger-Themen 3
M Array List ausgeben Java Basics - Anfänger-Themen 13
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
S Gute List Implementation Java Basics - Anfänger-Themen 5
A List Array - wie instanzieren Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben