Listen Problem!

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hi habe hier ein etwas größeres Problem,

hatte neulich schon mal was dazu geschrieben, aber die Dinge liegen jetzt ein wenig anders. Erst mal die erste Frage, wenn die gekläer ist kommt die nächste, obwohl das auch blöd ist, vielleicht brauch ich ja die zweite für die erste. Gut.

Also es geht immer noch um doppelt verkettete Listen. Erzeuge hier eine Liste ind er Klasse List

Code:
//Speichert die Laenge der Liste
private int length;
	
//Zeiger auf das erste und letzte Element
private Listenelement firstElement;
private listenelement lastElement;

//...

public List() {
		firstElement = null;
		length = 0;
		lastElement = null;
	}
//...

Mit dieser MEthode kann ich mir ja recht bequem das erste Element zurück geben lassen

Code:
public Element firstElement() {
		if(isEmpty()) {
			return null;
		}
		else {
			return firstElement.wert;
		}
	}

Jetzt suche ich ein Methde mit der ich mir das letzte Element ausgeben kann. Diese soll aber nicht rekursiv oder imperativ durch die komplette Liste laufen, sondern logischer Weise von hinten beginnen. Hab bis jetzt als Amhaltspunkt nur die Länge, weiß nich ob das wirklich weiter hilft.

Einfügen tue ich mit diesen Methoden

Code:
//...
/**
	 * Fuegt ein Element am Anfang der Liste ein
	 * */
	public void insert(Element x) {
		firstElement = new Listenelement(firstElement, x);
		length++;
	}
	
	/**
	 * Fuegt ein Element am Ender der Liste ein
	 * @param Element x
	 * */
	public void append(Element x){
		if (isEmpty()) {
			insert(x);
		}
		else {
			Listenelement p = firstElement; 
			for(; p.next != null; p = p.next);
			p.next = new Listenelement(null, x);
			length++;
		}
	}
//...

Die einzellnen Listen Elemente erzeuge ich hier, lokale Klasse in List

Code:
class Listenelement {
		Listenelement next;
		Element wert;
		Listenelement pre;
		
		/**
		 * Lokaler Konstruktor
		 * @param Listenelement next
		 * @param Element x, neues Element zum eimfügen
		 * */
		Listenelement(Listenelement next, Element x){
			System.out.println();
			this.next = next;
			this.wert = x;
		}

irgendwie und irgendwe muss ich jetzt auch noch die doppel verkettung realiesieren.

Naja, hoffe ihr könnt mir erstmal helfen! Warte auf eure Tipps! Danke!
 

mic_checker

Top Contributor
Imperativ? Du meinst sicher iterativ.

Du willst das letzte Element ausgeben? Du hast doch eine Referenz auf das letzte Element....
 

mobile

Bekanntes Mitglied
ja iterativ, logo! Aber da steht ja immer nur null drin, da ich da ja noch ncihts zugewiesen habe! Hatte es erst so gemacht, dass ich direkt bei Anlegen eines neuen Listenelements, das Element an lastElement gespeichert habe, geht aber logischer Weise nur bei append(Element x), also am Ende einfügen. Aber nicht bei insert, wenn ich am Anfang einfügen will, da muss ich ja dann das Element nach hinten veschieben, da müsste dann ja das zu erst eingefügte Element das letzte sein.
 
S

SlaterB

Gast
> da ich da ja noch ncihts zugewiesen habe

wenn du kein Listenende hast, dann musst du von vorne anfangen ;)


> sondern logischer Weise von hinten beginnen. Hab bis jetzt als Amhaltspunkt nur die Länge, weiß nich ob das wirklich weiter hilft.

was du alles willst oder anhälst oder punktest ist egal,
ohne Ende gibts nur vorne?!
 

mic_checker

Top Contributor
Wenn du hinten anfügst, musst du Referenz auf letztes logischerweise aktualisieren. Bzw. wenn du letztes löschst etc.
 

mobile

Bekanntes Mitglied
aber die Methode append, könnte man doch, wenn ich direkt auf das letzte Element zugreifen könnte auch enfacher schreiben oder? Dann muss ich ja nich mehr durch die ganze Liste laufen so wie jetzt!
 

mic_checker

Top Contributor
Du hast die Referenz auf das letzte. Wenn du hinten anfügst, fügst du hinter dem bisher letzten ein..das machst du , passt die Referenzen an und dann noch die von dem letzten auf das soeben eingefügte.
 

mobile

Bekanntes Mitglied
will am anfang ein Element einfügen, also ist der vorgänger leer, also muss ich auf den nachfolger verweisen und damit ich die doppelte verkettung habe, vom nachfolger auch wieder auf den vorgänger.. oder?
 
S

SlaterB

Gast
also geht gerade um
> Jetzt suche ich ein Methde mit der ich mir das letzte Element ausgeben kann.
(dein erstes Post)
oder um
> Wenn du hinten anfügst, fügst du hinter dem bisher letzten ein..
(oder worum auch immer es bei mic_checker geht)
oder nun um
> will am anfang ein Element einfügen
(dein letztes Post)

??
kann man sowas nicht mal deutlich klären?
 

mobile

Bekanntes Mitglied
ok dann einigen wir uns jetzt erst mal auf eine Methode mit der man am Ende einfügen kann ohne durch die ganze Liste zu laufen! Hab jetzt hier mal so was gemacht:

Code:
	Listenelement(Listenelement next, Element x){
			System.out.println();
			System.out.println("Element: " + (length + 1));
			this.next = next;
			this.wert = x;
			
			if(next == null) {
				lastElement = x;
			}
		}

Dmit bekomme ich jetzt mit beiden Methoden (insert und append) die richtigen Elemente angezeit. Kann man das so machen?
 

mobile

Bekanntes Mitglied
nur ich benutze meine Methode lastElement() nich so wie ich es eigentlich machen soll laut Aufgabe!
 
S

SlaterB

Gast
> ok dann einigen wir uns jetzt erst mal auf eine Methode mit der man am Ende einfügen kann ohne durch die ganze Liste zu laufen! Hab jetzt hier mal so was gemacht:

was hast du da gemacht?
ist das ein Konstruktor für die Klasse Listenelement?
geht's nicht um eine Operation insert oder append?

> Damit bekomme ich jetzt mit beiden Methoden (insert und append) die richtigen Elemente angezeit. Kann man das so machen?

kann mir kaum vorstellen, dass du ein Objekt in die Liste richtig einfügt, wenn du nur ein ListenElement baust,
aber z.B. nicht firstElement/ lastElement und/ oder die anderen ListenElemente der Liste anpasst,
ob du das tust, weiß ich nicht, da du die entsprechenden Operationen nicht postest
(und ich werde sie mir nicht irgendwo im Thread zusammensuchen ;) )

> nur ich benutze meine Methode lastElement() nich so wie ich es eigentlich machen soll laut Aufgabe!

was soll das nun wieder heißen?
hat mit dem vorherigen Post nix zu tun, jedenfalls nicht so, als dass man es verstehen würde
 

mobile

Bekanntes Mitglied
huuuuuuuuuuu, ich werd hier noch verrückt. :) :( Noch mal von vorne. Ich habe eine Klasse List, hier der Konstruktor und die beiden Zeiger die ich belegen möchte!

Code:
//...
	//Zeiger auf das erste und letzte Element
	private Listenelement firstElement;
	private Listenelement lastElement;
	
	/**
	 * Konstruktor
	 * erzeugt leere Liste
	 * */
	public List() {
		firstElement = null;
		length = 0;
	}
//....

In der Klasse List befindet sich die lokale Klasse Listenelement:

Code:
//...
Listenelement next;
		Element wert;
		Listenelement pre;
		
		/**
		 * Lokaler Konstruktor
		 * @param Listenelement next
		 * @param Element x, neues Element zum eimfügen
		 * */
		Listenelement(Listenelement next, Element x){	
			this.next = next;
			this.wert = x;
		}
//...

So jetzt brauche ich irgendwie einen festen Verweis auf das erste Element in der LIste das bekomme ich mit der Methode hier:

Code:
public Element firstElement() {
		if(isEmpty()) {
			return null;
		}
		else {
			return firstElement.wert;
		}
	}

und einen Verweis auf das letzte Element, das bekomme ich nich hin, wenn das da is machen wa mal weiter, okay? :)
 
S

SlaterB

Gast
normalerweise würde ich jetzt weiternerven a la 'wie definierst du, wie greifst du drauf zu usw'
aber da du schon Einsatz zeigst etwas Tempo:
warum geht folgendes nicht?
Code:
public Element lastElement() { 
      if(isEmpty()) { 
         return null; 
      } 
      else { 
         return lastElement.wert; 
      } 
   }
 

mobile

Bekanntes Mitglied
tja, wenn ich das mal wüsste. Gibt immer nen NullPointerException.

Vielleicht hilft es ja, mit der MEthode füge ich am Anfang der Liste ein.

Code:
public void insert(Element x) {
		firstElement = new Listenelement(firstElement, x);
		length++;
	}

mit der hier am Ende!

Code:
public void append(Element x){
		if (isEmpty()) {
			insert(x);
		}
		else {
			Listenelement p = firstElement; 
			p.next = new Listenelement(null, x);
			length++;
		}
	}

alles was dazu benötigt wird hab ich grad gepostet. In einer Test Klasse erzeuge ich das ganze so:

Code:
//Zwei Listen anlegen
		List l1 = new List();
		List l2 = new List();
	
		//5 Elemente werden angelegt
		Element e1 = new Element("Max"),
				e2 = new Element("Mustermann"),
				e3 = new Element("Musterweg 45"),
				e4 = new Element("45632 Musterstadt"),
				e5 = new Element("05487/34567");
		System.out.println("Erstes Element: " + l1.firstElement());
		//Elemente werden immer ans Ende in die Liste l1 eingefügt		
		l1.insert(e1);
		l1.insert(e2);
		l1.insert(e3);
		l1.insert(e4);
		l1.insert(e5);

//...

Hab ich was wichtiges vergessen?
 

Leroy42

Top Contributor
Mal eine etwas Off - Topic-Frage:

Ich verkürze soetwas wie
Code:
public Element lastElement() { 
      if(isEmpty()) { 
         return null; 
      } 
      else { 
         return lastElementt; 
      } 
   }
immer zu
Code:
public Element lastElement() { 
      return isEmpty() ? null : lastElement; 
}

Begründung: Die Rückgabe von Irgendetwas hat bei mir höhere Priorität als
zu erkunden was zurückgegeben werden soll.

Seht ihr das ähnlich oder ist mein Stil ungünstig? ???:L
 

schalentier

Gesperrter Benutzer
Du musst auch das lastElement belegen. Wenn noch nix in der Liste ist, und du was einfuegst (egal ob vorn oder hinten), dann muss
Code:
firstElement == lastElement
sein.

/edit: @vorposter:

Ich mag das Konstrukt nicht, ist zwar kuerzer, aber IMHO schwerer lesbar, nerviger zu debuggen und schlecht erweiterbar. Ist aber nur meine Meinung... :)
 

mobile

Bekanntes Mitglied
aber irgendwie bringt das ja nichts. ich habe schon 5 Elemente eingefügt, da kommt trotzdem der Pointer. Wenn ich nicht einfüge und nur die Liste erstelle ist beides null! also last und firstelement
 
S

SlaterB

Gast
@timkon:
z.B. in deinem insert musst du auch lastElement setzen,

und 'pre' setzt du wohl nirgendwo?..

wieso ist bei insert das firstElement das 'next' des eingefügten Elementes
(erster Parameter im Konstruktor Listenelement)?

--------

male dir erstmal auf Papier auf/ schreibe in deutscher Sprache, was überhaupt beim insert/ append passieren soll,
also konzentriere dich erstmal auf eine der beiden Operationen,

mindestens zu klären:
was passiert mit:
kopf, ende, neues Element, Vorgänger des neuen Elementes in der Liste, Nachfolger des neuen Elementes in der Liste
sowie pre und next dieser 5 Elemente
 

mobile

Bekanntes Mitglied
beim aufruf von List, wird jetzt Listenelement first.. und last auf null gesetzt
Code:
public List() {
		firstElement = null;
		length = 0;
		lastElement = null;
	}

dann möchte ich mit Insert ein neues Object am Anfang der Liste einfügen.

Code:
public void insert(Element x) {
		firstElement = new Listenelement(firstElement, x);
		length++;
	}
muss ich hier schon irgendwelche Verweise setzten? Eigentlich nich oder? Hier übergebe ich mein aktuelles erstes Object null und mein neues was ich eijnfügen möchte an Listenelement. Das null obeject, als eigentlich erstes Object soll erhalten bleiben.

So dann sind wir jetzt in Listenelement.

Code:
class Listenelement {
		Listenelement next;
		Element wert;
		Listenelement pre;
		
		/**
		 * Lokaler Konstruktor
		 * @param Listenelement next
		 * @param Element x, neues Element zum einfuegen
		 * */
		Listenelement(Listenelement next, Element x){	
			this.next = next;
			this.wert = x;			
		}

Hier muss ich jetzt die Verweise setzen richtig? mit this.next zeige ich doch auf das neu einzufügende Element, also stelle ich jetzt mein null object hinter (quasi rechts neben) mein neues Object. In this.wert speicher ich den Wert meines neuen Objectes. Ist das so weit richtig was ich erzähle?

Dann brauche ich jetzt noch nen Verweis vom null Object zum neu eingefügten, also müsste ich jetzt mit pre arbeiten oder? mein neues Obeject ist jetzt ja mein erstes also braucht es keinen Vorgänger, und bei dem null Object (mein letztes) gibt es keinen Nachfolger, wie könnte das dann in Code aussehen?
 
S

SlaterB

Gast
SlaterB hat gesagt.:
male dir erstmal auf Papier auf/ schreibe in deutscher Sprache, was überhaupt beim insert/ append passieren soll,
also konzentriere dich erstmal auf eine der beiden Operationen,

mindestens zu klären:
was passiert mit:
kopf, ende, neues Element, Vorgänger des neuen Elementes in der Liste, Nachfolger des neuen Elementes in der Liste
sowie pre und next dieser 5 Elemente

kleiner Tipp: bei google kannst du verkettete Listen zum abschauen finden, ich wiederhole das nicht alles hier..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Problem Methoden, Klassen, Listen Allgemeine Java-Themen 27
T Problem mit Listen Allgemeine Java-Themen 8
F Problem mit Java Listen Allgemeine Java-Themen 4
D Zwei Listen vergleichen Allgemeine Java-Themen 7
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Listen Allgemeine Java-Themen 3
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
E Listen in Java aneinanderfügen, subtrahieeren usw. Allgemeine Java-Themen 14
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
S Intressante Benchmark-Ergebnisse mit Listen. Weiss jemand wie man diese erklaeren kann? Allgemeine Java-Themen 15
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
P Listen sortieren Allgemeine Java-Themen 1
RalleYTN Collections Verständnisfrage zu Objektreferenzen in Listen Allgemeine Java-Themen 5
C Listen Allgemeine Java-Themen 1
M liste von listen anders ausgeben Allgemeine Java-Themen 1
W Sortierte Listen - Methode suchen Allgemeine Java-Themen 17
W Sortierte Listen mit Polymorphismus Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
S Permutation und Listen Allgemeine Java-Themen 2
P Doppeltverkettete Listen + Text Allgemeine Java-Themen 5
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
F JAXB / Listen durchlaufen Allgemeine Java-Themen 17
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
F Vergleich zweier Listen Allgemeine Java-Themen 4
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D variabler Listen name Allgemeine Java-Themen 3
V Drucken von Listen Allgemeine Java-Themen 6
S Doppelte Werte in Listen,Vectoren etc suchen Allgemeine Java-Themen 2
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
M Addieren von Listen Allgemeine Java-Themen 2
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
H Listen Allgemeine Java-Themen 5
G Datenstruktur: LISTEN Allgemeine Java-Themen 7
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
K Listen,Bäume,Mengen Allgemeine Java-Themen 3
S Hinzufügen von Elementen zu Listen Allgemeine Java-Themen 4
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
D Listen / Datenstrukturen und ein blutiger Anfänger Allgemeine Java-Themen 7
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
B binarysearch bei listen mit klassen Allgemeine Java-Themen 4
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
C Listen in Java. Anehängter Code nicht ganz klar Allgemeine Java-Themen 19
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
E Verkettete Listen Allgemeine Java-Themen 5
M objekt mit listen Allgemeine Java-Themen 5
G Domainen crawlen & Domainnamen listen -> LANGSAM! Allgemeine Java-Themen 19
M doppelt verkettete Listen? Allgemeine Java-Themen 5
M Serialisierte listen ausgeben? Allgemeine Java-Themen 6
F 2 Varianten für synchronisierten Zugriff auf Listen Allgemeine Java-Themen 2
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
G Synchronisierte Listen. ein Graus Allgemeine Java-Themen 4
M Verknüpfung von Listen Allgemeine Java-Themen 3
S Frage zu ArrayList mit Listen Allgemeine Java-Themen 8
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
D Listen Allgemeine Java-Themen 4
M sortierte listen Allgemeine Java-Themen 5
I Doppelt verkette Listen Allgemeine Java-Themen 2
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben