OOP Verkettete Liste

bordon

Mitglied
Hallo,
ich habe eine Frage zu einer verketteten Liste. Und zwar hab ich folgenden Code:

Java:
public class Hauptklasse {
	public static void main(String[] args){
		Liste verk = new Liste();
				
		verk.insertToTop("sieben");							
		verk.insertToTop("eins");							
		verk.insertToTop("vier");							
		
		verk.insertToEnd("drei");
		
		System.out.println(verk.search("eins"));	
		System.out.println(verk.search("achtzehn"));		
		
		System.out.println(verk.anzahl);				
	}

}
public class Knoten {
	String daten;
	Knoten next;
	Knoten prev;
	
	Knoten(String daten){
		this.daten=daten;	
		next=null;
		prev=null;
	}

}
public class Liste {
	Knoten head = null;
	Knoten tail = null;
	int anzahl = 0;
	
	void insertToTop(String daten){
		Knoten p = new Knoten(daten);
		p.next=head;
		head=p;
		anzahl++;
	}
	
	void insertToEnd(String daten){
		Knoten p = new Knoten(daten);
		if(head==null){
			head=p;
		}
		else{
			tail.next=p;
			tail=p;
		}
		anzahl++;
	}
	
	Boolean search(String daten){
		Knoten p = head;
		while(p!=null && p.daten!=daten){
			p=p.next;
		}
		if(p==null){
			return false;
		}
		else{
			return true;
		}
	}
	
}

Und zwar, wenn ich die Methode
Java:
verk.insertToEnd("drei");
aufrufe, kommt bei mir eine java.lang.NullPointerException und ich weiß nicht wieso.

Eine zweite Frage ist noch: Wie kann ich überprüfen, ob das Element das ich einfüge an erster oder letzter Stelle der Liste ist?

Danke für eure Hilfe und freundliche Grüße
 

bordon

Mitglied
Aber ich hab doch mit den

Java:
verk.insertToTop("sieben");							
verk.insertToTop("eins");							
verk.insertToTop("vier");

schon was in die Liste geschrieben, wieso ist tail dann null? Muss ich in der Methode
Java:
void insertToTop(String daten){
		Knoten p = new Knoten(daten);
		p.next=head;
		head=p;
		anzahl++;
}

noch was mit tail machen?
 
M

Marcinek

Gast
Ja sicher..

Woher soll das Programm den wissen, dass da plörtlich nen wert rein muss?
 

bordon

Mitglied
Aber ich schreib doch was mit der Methode:

Java:
void insertToEnd(String daten){
		Knoten p = new Knoten(daten);
		if(head==null){
			head=p;
		}
		else{
			tail.next=p;
			tail=p;
		}
		anzahl++;
}

in tail rein????
 
M

Marcinek

Gast
Betrachte das mal ein wenig logischer..

Du hast 2 Finger

Head, zeigt auf den ersten und tail auf letzten.

Wenn du nun ans ende was einfügen willst, und head und tail zeigen auf nix, dann müssen beide auf das neue Element zeigen logisch.

Nun Fügst du nochmal was ans ende.

Dann hast du 2 Elemente, wovon auf den linken (bildlich) zeigt der head-Finger und auf den letzten der tailfinger.

Außerdem zeigt das linke element mit next auf das rechte.

Male dir das mal auf einem Blatt papier auf und vergleiche es mit deinem program.
 

bordon

Mitglied
ok, dass habe ich verstanden.
Ich habe versucht es umzusetzen und auf folgenden Vorschlag gekommen, der auch nicht funktioniert:
Java:
void insertToEnd(String daten){
		Knoten p = new Knoten(daten);
		tail=p;
		head=p;
		tail.next=p;
}

Wieso funktioniert das nicht?
 
M

Marcinek

Gast
Nun es ist vollkommen falsch.

Du musst mehrere Fälle unterscheiden.

1. Es gibt noch keine Elemente in der Liste

2. Es gibt nur 1 Element in der Liste

3. Du möchtest ein Elemente vorne (head) oder hinten (tail) einfügen.

Jetzt muss man sich überlegen.

Wie erkenne ich diese Fälle. (Hinweis, ich würde es auf keinen Fall an der Anzahl festmachen!)

Beispiel fall 1:

Es sind noch keine Elemente in der Liste, ergo ist head und tail null.
Java:
if(head == null && tail == null) {
   // Es gibt keine Elemente in der Liste!
  // Head und tail müssen auf das neue zeigen!
   head = p;
   tail = p;
}

Diesen Zustand musst du dir auf einem Papier aufmalen!

2 vierecke benannt head und teil zeigen nun auf ein drittes viereck p

Nun Fall 2:

head und tail sind schonmal != null! Warum? - Weil das 1. Elemente egal, ob tail oder head hinzugefügt sowohl von head als auch tail referenziert wird.

Nun kommt ein weiteres p2 während p1 schon in der Liste ist.

Wenn du das nun hinten einfügen willst, dann

(hier ist die reihenfolge wichtig!

tail (was p1 ist) auf p2 zeigen. also
Code:
tail.next = p2

und dann muss tail zu p2 werden.
Code:
tail = p2

Daraus ergibt sich

Java:
head   tail  
 |          |
 v         v
p1  ->  p2

und nun du
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
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
M verkettete Liste auslesen Java Basics - Anfänger-Themen 7
K eigene verkettete Liste Java Basics - Anfänger-Themen 4
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
A Eine verkettete Liste Java Basics - Anfänger-Themen 43
G verkettete lineare Liste Java Basics - Anfänger-Themen 2
L verkettete Liste - Ausgabeproblem Java Basics - Anfänger-Themen 2
G Wie kann ich eine verkettete Liste in ein JTable einfügen? Java Basics - Anfänger-Themen 7
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
R ArrayList Objekt -> verkettete Liste Java Basics - Anfänger-Themen 4
R verkettete Liste Java Basics - Anfänger-Themen 13
R verkettete Liste in und aus Datei Java Basics - Anfänger-Themen 5
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
J doppelt verkettete Liste Java Basics - Anfänger-Themen 5
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
G Dopplelt verkettete liste Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben