Zeiger auf das letzte Element in einer linearen Liste

hawkeye78

Bekanntes Mitglied
Hallo,

ich versuche im Moment eine Liste zu implementieren die die Objekte a_1, ..., a_n entgegen nimmt und diese auch in dieser Reihenfolge in einer linearen Liste einfügt. Ich habe dazu bis jetzt folgende Methode geschrieben:
Java:
public Node insert(Node a[])
{
	Node list=null;
	Node preNode=null;

	for(int i=0; i<a.length; i++)
	{
		if(list==null)
		{
			list=a[i]
			preNode=list;		
		}
		else
		{
			tree.setNext(a[i]);
			preNode=a[i];
		}
	}

	return list;
}
Dabei war die Idee das ich in der Variable preNode jeweils das letzte Element verwalte so das ich nicht bei jedem einfügen die Liste neu durch laufen muss. Aber dummerweise funktioniert es nicht und irgendwie bin ich mit Blindheit geschlagen, warum nicht? Ich habe darum die Hoffnung das hier evtl. jemand mal darüber schauen kann, um mir zu sagen warum es nicht funktioniert. Ich wäre für den einen oder anderen Tipp auf jeden Fall sehr dankbar
viele Grüsse
Dan
 
was die Methode machen soll musst du nochmal neu genau beschreiben,
die Variable preNode ist äußerst verdächtig, die wird doch nirgendwo verwendet (eine IDE wie Eclipse würde das unter guter Konfiguration auch als Warnung anstreichen)

wenn du preNode ganz rausnimmst hat das keine Änderung,

auch list selber hat praktisch nur die Funktion a[0] anzunehmen und am Ende der Rückgabewert zu sein,
davon abgesehen wird es nicht mehr verwendet, nie mehr geändert, a[0] auch sonst ignoriert,

nur alle anderen a werden dann, weil list ja nicht mehr null ist, in tree eingefügt, was das auch immer ist,
alle a kommen in den tree rein, aber list + preNode interessiert das nicht die Bohne

ist das der Plan?
 
Hallo SlaterB,

eigentlich bin ich drauf und dran den Huffman-Code zu implementieren. Dazu habe ich zu erst die Buchstaben die in der Eingabe vorkommen gezählt und aufsteigend nach ihrer Anzahl sortiert. Dann habe ich aus jedem Buchstaben der in der Eingabe auftritt ein Objekt mittels der Klasse
Java:
public class Node
{
	Node leftChild;
	Node rightChild;
	Node next;
	int counter=0;
	String character="";

	public Node(String c)
	{
		character=c;
	}

	// ...und hier folgen die Getter- und Setter Methoden zum Setzen bzw auslesen der Variabeln
}
und hänge diese in einer linearen Liste zusammen. Das Funktioniert auch soweit...Nun nehme ich immer 2 Objekte aus dieser Liste heraus und erzeuge daraus einen "Baum" mit einer Wurzel und 2 Kindern und diese kleinen Teilbäume möchte ich nun in eine neue Liste einfügen um dann diese wieder paarweise zu neuen Bäumen zusammenzufassen usw. bis am ende nur noch ein Baum übrig bleibt.
Um noch mal alles zusammen zu fassen, das erzeugen der ersten Liste für den ersten Durchlauf funktioniert, das zusammenfassen der einzelnen Knoten zu bäumen funktioniert auch. Aber leider scheitere ich jetzt daran diese in eine zweite Liste einzufügen, ich könnte natürlich jedes mal die Liste bis zum ende durchlaufen um den Knoten dann einzuhängen. Aber das halte ich für eine verschwendung von Performance. Aus diesem Grund würde ich einfach nach dem einfügen eines Knotens einen Zeiger auf diesen Knoten speichern um dann beim nächsten Einfügen direkt zum letzten Element zu kommen.
Ich hoffe ich konnte einigermaßen klar beschreiben, was ich vorhabe und wo mein Problem liegt. Auf jeden Fall möchte ich mich schon einmal für deine hilfe bedanken.
Viele Grüsse
Dan
 
die Erklärungen sind eine Sache, aber dein Code scheint nichts damit zu tun zu haben,
ich möchte nicht alles nochmal wiederholen, kann dies aber an einem Code-Beispiel für irgendwas SINNVOLLES verdeutlichen

Java:
public void addElementeGanzHinten(Elemente) {
 Node letzter = findLetzen();
 for (jedes neue Element) {
    letzter = letzter.addNext(element);
 }
}
das wäre in etwa ein Code, der eine Variable, die immer auf des letzte Element zeigt, ständig aktuell hält, vor allem aber auch ständig benutzt, zum Einfügen des neuen Elements,
in deinem ersten Code ist preNode dagegen wie gesagt ohne Funktion

was auch immer du aktuell möchtest oder wie dein Programm aussehen soll, kann ich nicht erahnen,
anderweitig vorerst nicht weiterhelfen
 
ja genau und genau um die Funktion "findLetzter()" geht es mir. Meine idee war halt sobald ich ein neues Element einfüge setze ich einfach die Referenz auf das letzte eingefügte Objekte in der Liste, aber das scheint irgendwie nicht zu funktionieren. Ich denke im moment werde ich wohl um eine Schleife die bei jedem neuen Einfügen das letzte Element sucht nicht herum kommen...
 

Zurück
Oben