Verkettete Listen

Usarian

Mitglied
Hallo schon wieder :) Ich hab Probleme mit 'ne Aufgabe und zwar:
Aus einer einfach-verketteten Liste soll eine doppelt-verkettete Liste erstellt werden. Führen Sie dazu folgende
Schritte aus:
• Implementieren Sie für die aus der Vorlesung bekannte doppelt-verkettete Liste DList die Methoden
insertFirst, insertLast und delete.
• Erstellen Sie eine einfach-verkettete Liste mit den Elementen 1, 7, 3, 5, 2, 9.
• Wandeln Sie die einfach-verkettete Liste in eine doppelt-verkettete Liste um!
• Lassen Sie sich anschließend die doppelt-verkettete Liste ausgeben, inklusive Minimum und Maximum.
• Führen Sie auf der doppelt-verketteten Liste die Operationen delete(9), insertLast(14),
delete(0), insertFirst(-5) und delete(3) aus.
• Lassen Sie sich abschließend die resultierende doppelt-verkettete Liste ausgeben.

Da hab ich mich schon einige Tage damit beschaeftigt, aber da kriege ich es immer noch nicht her.
Also die aus der Vorlesung bekannte doppelt-verkettet Liste DList ist:

Java:
class DList {
DNode head, last; // erstes und letztes Listenelement
DList() {head = null; last = null;}
// weitere Methoden siehe etwa wie nachfolgende
   . . .
   String toStringInverse(){ // Zeichenkette für invertierte Liste
if(head == null)  // Trivialfall: Leere Liste 
return ''( )'';
String s = ''('';
DNode tmp = last;// ans Ende der Liste gehen
while(tmp != null){
s = s + tmp.data + '' '';
tmp = tmp.prev;
}
s = s + '')'';
return s;
    }   
}

Fuer die insertFirst Methode hab ich so was herausgedacht, bin aber ueberhaupt nicht sicher ob es stimmt und was es bedeutet (hab ich es in ein Java Programmierbuch gefunden)

Java:
public void insertFirst(int data) {
    Element n = new Element(data);
    n.next = last;
    last = n;
  }

Also das hier sollte meine insertLast Methode sein. Das verstehe ich schon, aber ich bin nicht sicher ob ich es auch fuer doppelt-verkettete Listen benutzen darf.

Java:
public void insertLast(Object item) {
if (head == null) {
// Wir haben eine leere Liste
head = new DNode(item);
last = head;
} else {
// Wir haben eine nichtleere Liste
DNode newDNode = new DNode(item, last);
last = newDNode;
}
count++;
}

Und fuer die delete Methode hab ich gar keine Ahnung wie ich diese erzeugen kann. Ausserdem wie erstelle ich eine einfach-verkaettete Liste und wie fuelle ich diese mit Zahlen(darf ich das in meine main Methode machen oder soll ich noch eine Methode extra schaffen, damit ich meine Liste mit Zahlen fuelle?) Und noch was. Wie bekomm ich aus eine einfach-verkettete Liste eine doppelt-verkettete Liste?

Huh es wurde ein langes Thema daraus :( Aber ich weiss echt nicht was ich machen muss.

Herzlichen Dank im voraus.
 

DamienX

Aktives Mitglied
Also hier
Doubly linked list (Java) - LiteratePrograms

gibts ne komplette Implementierung einer Double Linked List.
(Ich geh hier mal davon aus dass du weist was das ist.)

Das einzige Problem ist der Generic "<E>". Die kannste aber auch weglassen und in
den Klassen statt dem Typen E auch einfach Integer benutzen. Dann klappt das
auch.

Der Autor is bemüht das bewährte Knotensystem zu implementieren. Wenns an grundsätzlichem
hapert musst du leider genauer werden (Welche zusammenhänge bleiben dir verschlossen?).

EDIT: Die DNode Klasse wäre auch hilfreich da du ja bestehenden source anpassen sollst.

Mfg Alex
 
Zuletzt bearbeitet:

Usarian

Mitglied
Vielleicht ist diese Methode fuer insertLast besser?:

Java:
private DNode last = null;

  // private DNode ende = null;

  public void insertLast(int data) {
    if (last == null) {
      last = new DNode(data);
    } else {
      // suche Ende
      DNode e = last;
      while (e.next != null) {
        e = e.next;
      }
      // e ist das letzte DNode (Ende)
      e.next = new DNode(data);
    }
  }
 

Usarian

Mitglied
Naja nach einige Stunden muehe hab ich folgendes da liegen:

Java:
class Listen {
	
	class DNode {
		public static final int val = 0;
		int data;
		DNode element;
		DNode next, prev;
		DNode(int d) {data = d; prev = null; next = null;}
		DNode(int d, DNode p, DNode n){
		data = d; prev = p; next = n; }
		}
	
	
	public void insertFirst(int data) {
	    DNode n = new DNode(data);
	    n.next = last;
	    last = n;
	  }

	  // private DNode ende = null;
	 
	  public void insertLast(int data) {
	    if (last == null) {
	      last = new DNode(data);
	    } else {
	      // suche Ende
	      DNode e = last;
	      while (e.next != null) {
	        e = e.next;
	      }
	      // e ist das letzte DNode (Ende)
	      e.next = new DNode(data);
	    }
	  }
	
	  DNode head, last; // erstes und letztes Listenelement
	  Listen() {head = null; last = null;}
	  	// weitere Methoden siehe etwa wie nachfolgende
   
	    
	  
	  public void printList() {
		    System.out.print("[");
		    for (DNode e = last; e != null; e = e.next) {
		      System.out.print(e.data + " ");
		    }
		    System.out.println("]");
		  }

	  
	  


	  public static void main(String[] args) {
		  
		  Listen liste = new Listen();
		  liste.insertLast(new Integer(1));
		  liste.insertLast(new Integer(7));
		  liste.insertLast(new Integer(3));
		  liste.insertLast(new Integer(5));
		  liste.insertLast(new Integer(2));
		  liste.insertLast(new Integer(9));
		  liste.printList();
		  liste.delete(3);
		  liste.printList();
		  
	  }
}

Jetzt funktionieren beide Methode, aber ich hab immer noch keine Ahnung wie ich die delete Methode machen kann ???:L Koennte mir jemand bisschen helfen?

Ausserdem bin ich nicht sicher ob ich das richtig gemacht hab:
• Erstellen Sie eine einfach-verkettete Liste mit den Elementen 1, 7, 3, 5, 2, 9.

Aus dem obestehenden Quellcode bekomme ich folgendes als Ausgabe:

Java:
[1 7 3 5 2 9 ]
 
Zuletzt bearbeitet:

Firestorm87

Bekanntes Mitglied
Du musst den zu löschenen Knoten ausfindig machen, wovon du dann ja zugriff auf den Knoten davor und danach hast...

Und hier musst du dann nur die referenzen tauschen.... (d = zu löschen; p = knoten davor; a = knoten danach)
1) Suche d.
2) p = d.prev
a = d.next
3) p.next = a
a.prev = p

So in etwa :)

/EDIT: oder:
1) suche d
2) d.prev.next = d.next
d.next.prev = d.prev
 
S

SlaterB

Gast
hast du denn eine Vorstellung von der Liste?
auf Papier schonmal Rechtecke pro Node aufmalt und Linien für die Verlinkungen?
fürs Löschen musst du doch nur den Link vom Vorgänger auf den Übernächsten setzen, schon ist einer ausgelassen,

war dir das nicht klar oder gehts jetzt ums Programieren, was ist das aktuelle Problem?
(auch Spezialfälle wie Löschen am Anfang/ Ende bedenken und testen)
 

Usarian

Mitglied
Naja ich weis wie ich es machen muss. Wie du gesagt hast hab ich's auch gemalt, aber ich kann es einfach in eclipse nicht kriegen. Also das Ding nicht implementieren.
 

Firestorm87

Bekanntes Mitglied
Ich versteh nur bahnhof... was kriegst du in eclipse nicht hin?
Die Methode deklarieren, die Nodes ansprechen, die Referenzen tauschen?
 

Usarian

Mitglied
Ich krieg die delete Methode nicht funktionierend. Jetzt bekomm ich folgendes als Ausgabe:

Java:
[1 7 3 5 2 9 ]
Exception in thread "main" java.lang.IndexOutOfBoundsException: Invalid index: 3
	at Listen.remove(Listen.java:101)
	at Listen.main(Listen.java:137)

Und das ist meine main Methode:
Java:
public static void main(String[] args) {
		  
		  Listen liste = new Listen();
		  liste.insertLast(new Integer(1));
		  liste.insertLast(new Integer(7));
		  liste.insertLast(new Integer(3));
		  liste.insertLast(new Integer(5));
		  liste.insertLast(new Integer(2));
		  liste.insertLast(new Integer(9));
		  liste.printList();
		  liste.remove(3);
		  liste.printList();
		  
	  }


Und das soll meine delete Methode sein:

Java:
public DNode remove(int index) {
		  
		if (index>=length || index<0) {
			  throw new IndexOutOfBoundsException(
					  "Invalid index: " + index);
		  }
		  // Element mit index finden
		  	int currentIndex = 0;
		  	DNode currentNode = head;
		  	DNode prevNode = null;
		  		while (currentIndex < index) {
		  			prevNode = currentNode;
		  			currentNode = currentNode.next;
		  			currentIndex++;
		  		}
		  // Entfernen des elements
		  	length--;
		  		if (length==0) {
		  			head = null;
		  			last = null;
		  		} else if (prevNode == null) {
		  			head = currentNode.next;
		  		} else {
		  			prevNode.next = currentNode.next;
		  		}
		  		return (DNode) currentNode.element;
		 	 }
 

Firestorm87

Bekanntes Mitglied
Die Exception (also deine Fehlermeldung) verursachst du selber :p
Java:
if (index>=length || index<0) {
              throw new IndexOutOfBoundsException(
                      "Invalid index: " + index);
          }
Dabei sei die Frage gestattet was ist die Variable "length" ;)
 
S

SlaterB

Gast
so einen Stand schreibst du hier ins Forum?
denk doch bitte vorher etwas darüber nach, worum es dann bei diesem Problem geht, was du selber noch beitragen kannst

vollkommen vorhersehbare Antwort:
- die Exception ist offensichtlich von dir selber am Anfang der Methode
- niemand hier kennt length, das tauchte in deinem bisherigen Codes gar nicht auf
- in jedem Fall kannst du doch selber locker leicht klären, warum der Index 3 unverständlicherweise größer als length ist,
logge doch nach jedem Einfügen und besonders vor dem Löschen den Wert von length (System.out.println),
wenn der nicht ordentlich gesetzt ist, dann musst du erstmal dieses Problem lösen, über delete() gar nicht nachdenken

so, diese Minuten hätten wir uns alle sparen können, erst denken dann weitermachen ;)

(edit: sogar schon zu spät, alles nimmt seinen Lauf ;) )
 
S

SlaterB

Gast
ich hoffe, das war nur auf Firestorm87 bezogen,
siehe meine Antwort was du alles noch schreiben musst, bevor es weitergeht ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
N verkettete Listen Java Basics - Anfänger-Themen 4
M verkettete Listen Java Basics - Anfänger-Themen 1
V Methoden Verkettete Listen Index eines Elementes ausgeben Java Basics - Anfänger-Themen 10
D Collections Verkettete Listen und Fußball... Java Basics - Anfänger-Themen 11
S Verkettete Listen Java Basics - Anfänger-Themen 10
S Verkettete Listen in Java Java Basics - Anfänger-Themen 11
C Methoden Verkettete listen - next methode Java Basics - Anfänger-Themen 3
I verkettete listen Java Basics - Anfänger-Themen 12
K verkettete Listen - Klasse Knoten Java Basics - Anfänger-Themen 19
M Probleme mit verkettete Listen Java Basics - Anfänger-Themen 4
M verkettete Listen Java Basics - Anfänger-Themen 39
T Klasse in Java für doppelt verkettete Listen Java Basics - Anfänger-Themen 4
I verkettete listen Java Basics - Anfänger-Themen 5
H Doppelt verkettete Listen Java Basics - Anfänger-Themen 2
S doppelt verkettete Listen Java Basics - Anfänger-Themen 4
X Vererbung: Doppelt verkettete Listen Java Basics - Anfänger-Themen 16
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
H Verkettete Liste Java Basics - Anfänger-Themen 7
N Verkettete liste rückwärts ausgeben Java Basics - Anfänger-Themen 18
K Verkettete Liste und seine Methoden Java Basics - Anfänger-Themen 1
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
G 2 Aufgabe rund um eine verkettete Liste Java Basics - Anfänger-Themen 2
O Verkettete Liste Java Basics - Anfänger-Themen 10
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
S Doppelt verkettete Liste Java Basics - Anfänger-Themen 3
G Doppelt Verkettete Liste Java Basics - Anfänger-Themen 2
A Doppelt Verkettete Liste Java Basics - Anfänger-Themen 16
E doppelt verkettete liste Java Basics - Anfänger-Themen 10
V Verkettete Liste. Java Basics - Anfänger-Themen 7
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Verkettete Liste - Methode entwerfen Java Basics - Anfänger-Themen 14
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
B Insertionsort verkettete Liste Java Basics - Anfänger-Themen 4
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
R verkettete liste ansEndeSchieben Java Basics - Anfänger-Themen 13
T Verkettete Liste Java Basics - Anfänger-Themen 14
A Klassen Innere Klassen, verkettete Liste Java Basics - Anfänger-Themen 9
B Zweifach-verkettete Liste umkehren Java Basics - Anfänger-Themen 6
X verkettete Liste Java Basics - Anfänger-Themen 13
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
kae verkettete Liste Java Basics - Anfänger-Themen 5
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
R verkettete liste Java Basics - Anfänger-Themen 5
M Verkettete Liste Java Basics - Anfänger-Themen 4
M verkettete liste Java Basics - Anfänger-Themen 7
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
B verkettete Liste Java Basics - Anfänger-Themen 8
S zyklisch verkettete Liste erstellen Java Basics - Anfänger-Themen 3
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
J verkettete Liste Java Basics - Anfänger-Themen 2
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben