Einfache Liste , letztes Element

moguai

Grünschnabel
Code:
public class ParcelList {
	
	private Parcel knoten;
	private ParcelList next;
	private ParcelList first = null;
	private ParcelList last = null;
	
	public ParcelList(){
		knoten = null;
		next = null;
	}
	
	public ParcelList(Parcel knoten){
		this.knoten = knoten;
		this.next = null;
	}
	
	public ParcelList(Parcel knoten, ParcelList next){
		this.knoten = knoten;
		this.next = next;
	}
	
	public void appendParcelList(Parcel knoten){
		if(this.knoten==null){
			this.knoten = knoten;
			next = null;
			first = this;
		}
		else if(next == null){
			next = new ParcelList(knoten, null);
		}
		else{
			next.appendParcelList(knoten);
		}
	}
	
	public void prependParcelList(Parcel knoten){
		first = new ParcelList(knoten, first);
	}
	
	public void removeParcelList(){
		//last.setParcel(null);
	}
	
	public void printParcelList(){
		for(ParcelList print = first; print != null; print = print.getNext()){
			print.knoten.printparcel();
		}
		last.getParcel().printparcel();
	}
	
	public ParcelList getThis(){
		return this;
	}
	
	public void setParcel(Parcel knoten){
		this.knoten = knoten;
	}
	
	public Parcel getParcel(){
		return knoten;
	}
	
	public void setNext(ParcelList next){
		this.next = next;
	}
	
	public ParcelList getNext(){
		return next;
	}
	
	public void setFirst(ParcelList first){
		this.first = first;
	}
	
	public ParcelList getFirst(){
		return first;
	}
	
	public void setLast(ParcelList last){
		this.last = last;
	}
	
	public ParcelList getLast(){
		return last;
	}

}

Ich komme da gerade einfach nicht weiter! Ich möchte in meiner einfachen Liste "last" immer als letztes Element spreichern, damit ich das letzte Element einfach wieder entfernen kann. Leider check ich einfach net, wie ich bei allen Objekten last korrekt festlege.
 
Hi.

Falls ich dich richtig verstanden habe, wird das was du möchtest mit einer einfach verketteten Liste nicht möglich sein.

Um das letzte Element entfernen zu können müßtest du den Verweis des vorletzten Elementes auf dessen nächstes Element löschen. D.h. du müßtest immer Zugriff auf das vorletzte Element haben, was aber nach dem Löschen nicht mehr möglich ist.

Entweder du verwendest eine doppelt verkettete Liste, die es ermöglicht an beiden Enden in konstanter Zeit O(1) Elemente zu entfernen, oder du mußt dich eben beim Löschen des letzten Elementes der Liste immer durch die komplette Liste durcharbeiten.

Gruß
 
Hallo,

du müsstest jedesmal, wenn du ein Object hinzufügst, über alle Object drüber laufen und das letzte Element setzen.
Das ist meiner Meinung nach viel zu umständlich. Vor allem braucht es zu viel Rechenzeit. Es ist sinnvoller, wenn du das letzte Element löschen möchtest, an das Ende der Liste zu laufen und dann das letzte Element zu entfernen.

BSP:
Angenommen du setzt jedem Object das letzte Element. Wenn du eine Liste mit 100 Elementen hast und fügst 4 mal ein Object hinzu, musst du 4 mal das letzte Element in der Liste setzen. Also würdest du über 400 mal das Object setzen.
Wenn du jetzt nur ein Object löschen würdest, müsstest du nur einmal durch die komplette Liste laufen, egal wieviele du hinzufügst.
Da du nach deiner Variante auch immer, wenn du ein Object löschst, bei allem Elementen das Object neu setzen musst, läufst du wieder durch die komplette Liste.

Wie gesagt, es ist unnötig, bei allen das letzte Object zu setzen.

Gruß

Sascha
 

Neue Beiträge

Zurück