einfach verkette Liste

Status
Nicht offen für weitere Antworten.
I

itse

Gast
Hallo,

ich möchte eine Warteschlange als einfach verkette Liste erzeugen. Soweit funktioniert auch das Erzeugen, mit den einzelnen Personen in der Warteschlange, und das jede Person weiß,wer ihr Nachfolger (next) ist.

Nun möchte ich eine Person innerhalb der Warteschlange löschen, also die Person mit ihrem Nachfolger überschreiben, dazu habe ich folgendes programmiert:

Java:
	public boolean remove(String name) {
		//Liste leer
		if (this.first == null) {
			return false;
		} 
		//Das erste Element der Liste löschen
		else if (this.first.getName() == name) {
			this.first = this.first.getNext();
			return true;
		} else 
		//Ein Element innerhalb der Liste löschen
		{
			Person search = this.first;
			//Anhand des Namens das entsprechende Element in der Liste suchen
			while (search.getName() != name) {
				search = search.getNext();
			}
			
			//Dann wird der Nachfolger, des gesuchten ermittelt
			Person naechster = search.getNext();
			
			//Wenn der Nachfolger nicht existiert
			//Dann ist das gesuchte Elemente das Letzte in der Liste
			//und soll gelöscht werden
			if(naechster == null){
				search = null;
				return true;
				
			//Wenn der Nachfolgder existiert
			//Dann soll das gesuchte Element aus der Liste gelöscht werden
			//also mit dem Nachfolger überschrieben werden
			}else if(naechster != null){
				search = naechster;
				return true;
			}else
				return false;
		}
	}

Es wird immer von der ersten Person in der Warteschlange ausgegangen.

Das Löschen der ersten Person funktioniert auch einwandfrei, diese wird mit ihrem Nachfolger überschrieben.

Jedoch kann ich keine Person innerhalb der Warteschlange und am Ende löschen.

Es funktioniert, dass die Person innerhalb der Warteschlange samt ihrem Nachfolger gesucht wird. Auch die Person am Ende wird richtig erkannt und das die nächste Person nicht existiert.

Aber die gesuchte (zu ersetzende Person) wird nicht ihrem Nachfolger bzw. mit Null überschrieben.

Was mache ich da falsch? Das Ersetzen der Person müsste doch genauso wie bei der Ersten funktionieren?

Besten Dank
Michi
 

Michael...

Top Contributor
[JAVA=25] if(naechster == null){
search = null;
return true;

//Wenn der Nachfolgder existiert
//Dann soll das gesuchte Element aus der Liste gelöscht werden
//also mit dem Nachfolger überschrieben werden
}else if(naechster != null){
search = naechster;
return true;
}else
return false;
}
}
[/code]
Ich weiss ja nicht, wie Deine Klasse so aufgebaut ist, aber Du änderst hier ja nur irgendwelche lokalen Variablen, das hat ja nich unbedingt Auswirkungen auf die eigentlichen Objekte

[edit]
Im ersten Fall Zeile 26 müsstest Du eigentlich den Vorgänger von search haben und darauf sowas wie .setNext(null) aufrufen.
 

Schumi

Bekanntes Mitglied
Du ersetzt ja nur Deine lokale search Variable, Du solltest den Vorgänger von search nehmen und dessen Pointer neu besetzen.
 
I

itse

Gast
Ich habe zwei Klassen:

Person und Warteschlange.

Der Inhalt von Person:

Java:
public class Person {
	private String name;
	private Person next;

	public Person(String name) {
		this.name = name;
		this.next = null;
	}

	public String getName() {
		return this.name;
	}

	public Person getNext() {
		return next;
	}

	public void setNext(Person person) {
		this.next = person;
	}
}

Die Funktion setNext verwende ich bei der Warteschlange im Konstruktor, wenn ich eine neue Person erzeuge, soll die ihren Namen und den Nachfolger erhalten.

Ich weiß ja nur, wer der Nachfolger ist. Wie ermittle ich denn den Vorgänger um dann setNext verwenden zu können?

Geht das ohne eine zusätzliche Methode in der Klasse Person?

Danke.
 

Schumi

Bekanntes Mitglied
Den kannst Du Dir doch beim suchen nach der richtigen Person einfach vormerken. Ihn sich in den Listenelementen zu merken würde Deine Liste ja zu einer doppelt verlinkten machen.
 
I

itse

Gast
Vielen Dank für den Tipp.

So funktioniert es nun:

Java:
    public boolean remove(String name) {
        if (this.first == null) {
            return false;
        } 
        else if (this.first.getName() == name) {
            this.first = this.first.getNext();
            return true;
        } else {
        	
        	Person Vorgaenger = null;
            Person search = this.first;
            while (search.getName() != name) {
            	Vorgaenger = search;
                search = search.getNext();
            }
            if(Vorgaenger == null){
            	return false;
            }else{
                Vorgaenger.setNext(search.getNext());
                return true;
            }
        }
    }
 

Landei

Top Contributor
Etwas OT: Die unveränderliche Variante einer verketteten Liste lässt sich viel einfacher implementieren. Warum muss es immer veränderlich sein?

Java:
import java.util.NoSuchElementException;

public abstract class ImmutableList<T> {
  public abstract T head();
  public abstract ImmutableList<T> tail();
  public abstract boolean isEmpty();
  public abstract int size();
  public abstract ImmutableList<T> remove(T t);
  public abstract boolean contains(T t);
  public abstract ImmutableList<T> append(ImmutableList<T> list);
  
  private static class Nil<U> extends ImmutableList<U> {
    public U head() { throw new NoSuchElementException(); }
    public ImmutableList tail() { throw new NoSuchElementException(); }
    public boolean isEmpty() { return true; }
    public int size() {  return 0; }
    public ImmutableList<U> remove(U u) { return this; }
    public boolean contains(U u) { return false; }
    public ImmutableList<U> append(ImmutableList<U> list){ return list; }
  }

  private static class Cons<U> extends ImmutableList<U> {
    final U head;
    final ImmutableList<U> tail;
    private Cons(U head, ImmutableList<U> tail) {
      this.head = head; this.tail = tail;
    }
    public U head() { return head; }
    public ImmutableList tail() { return tail; }
    public boolean isEmpty() { return false; }
    public int size() {  return 1 + tail.size(); }
    public ImmutableList<U> remove(U u) {
      return head.equals(u) ? tail : cons(head, tail.remove(u)); 
    }
    public boolean contains(U u) { return head.equals(u) || tail.contains(u); }
    public ImmutableList<U> append(ImmutableList<U> list){ 
      return cons(head, tail.append(list)); 
    }
  }
  
  public static <E> ImmutableList<E> nil() { return new Nil<E>(); }
  public static <E> ImmutableList<E> cons(E head, ImmutableList<E> tail) { 
    return new Cons<E>(head, tail);
  }
}
 
I

itse

Gast
Hallo,

nun habe ich noch ein Problem. Eine weitere Funktion, die an einer bestimmten Stelle eine Person einfügt, sich sozusagen vordrängelt. Als Erstes wird die Person mit der Methode push(person) ans Ende der Schlange gestellt. Danach wollte ich es noch positionieren, jedoch funktioniert das nicht.

Die neue Person wird eingefügt ganz am Ende, aber ansonsten passiert nichts. Ich hatte mir vorgestellt per Hilfsvariable die Anzahl der Durchläufe zu zählen und wenn dieser mit dem angegeben Wert, wo soll die Person hin, es dann eingefügt wird. Das geht aber nicht, wo hackt es denn da bzw. ist meine Vorstellung so überhaupt umsetzbar/machbar ?

Java:
	public void insert(Person person, int stelle) {
		push(person);
		Person search = this.first;
    	Person Vorgaenger = null;
		int durchlauf = 1;
        while (durchlauf != stelle) {
        	Vorgaenger = search;
        	search = search.getNext();

        	if(durchlauf == stelle)
                Vorgaenger.setNext(person.getNext());
        	
        	durchlauf++;
        }
	}
 

Michael...

Top Contributor
Muss wohl eher so aussehen (Achtung ungeprüfter Code):
Java:
public void insert(Person person, int stelle) {
        if (stelle==0) {
        	person.setNext(this.first)
        	this.first = person;	
        }
        else if (stelle > 0){
        	Person parent = this.first;
	        for (int i=1; i<stelle; i++) {
	        	parent = parent.getNext();
	        }
	        person.setNext(parent.getNext());
	        parent.setNext(person);
        }
        else System.out.println("Ungültige Position: " + stelle);
}

Ausserdem, müssen noch die Fälle behandelt werden, wenn "stelle" <0 und >als die Listenlänge ist.
 

Schumi

Bekanntes Mitglied
Vielleicht solltest Du Dir vor Implementation von weiteren Operationen immer mal ein Bildchen malen, so visualisiert ist, wie die einzelnen Listenelemente verlinkt sind. Dann kannst Du Dir dort genau klarmachen, welcher Zeiger anschließend worauf zeigen soll.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfach verkette Liste Java Basics - Anfänger-Themen 27
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
N Erste Schritte HelloWorld möchte einfach nicht laufen Java Basics - Anfänger-Themen 11
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
V Codezeile wird einfach nicht ausgeführt Java Basics - Anfänger-Themen 23
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
M Array in ein Array übertragen (möglichst einfach) Java Basics - Anfänger-Themen 6
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
R Methoden... ich vesteh sie einfach nicht Java Basics - Anfänger-Themen 15
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
D Klassen Klassen, Objekte, Konstruktor - einfach erklärt Java Basics - Anfänger-Themen 12
B Variable wird einfach so wieder auf "null" gesetzt Java Basics - Anfänger-Themen 12
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
W Java-Programm als Icon mit Doppelklick einfach öffnen ? Java Basics - Anfänger-Themen 3
M Layout einfach bilden Java Basics - Anfänger-Themen 4
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
N einfach verkettete liste Java Basics - Anfänger-Themen 3
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
E JMC - Dlls einbinden - möglichst einfach Java Basics - Anfänger-Themen 8
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
H Typumwandlung String --> Int (ganz einfach) Java Basics - Anfänger-Themen 9
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
M jar-Datei einfach umbenennen? Java Basics - Anfänger-Themen 8
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
S Filewriter schreibt einfach nicht Java Basics - Anfänger-Themen 6
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4
X WAV conversion ist einfach nicht möglich Java Basics - Anfänger-Themen 2
J jar erstellen. Es klappt einfach nicht Java Basics - Anfänger-Themen 14
L Eingeben Rechnen Ausgeben - Leider nicht so einfach Java Basics - Anfänger-Themen 31
P einfach frage zur vererbung Java Basics - Anfänger-Themen 9
G Frank A. - ports einfach öffnen und schließen Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L while wird einfach übersprungen? Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
B Thread will einfach nicht stoppen Java Basics - Anfänger-Themen 12
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
N Mein Applet findet -online- einfach die Klasse nicht ! Java Basics - Anfänger-Themen 6
S Java rundet einfach auf 0 Java Basics - Anfänger-Themen 2
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
L Ein Bild auf ein JFrame legen. nicht so einfach? =( Java Basics - Anfänger-Themen 11
M Tablelayout einbinden - ich schaff's einfach nicht Java Basics - Anfänger-Themen 16
D Button Text will einfach nicht erscheinen Java Basics - Anfänger-Themen 6
M Methoden. ich versteh das einfach nicht! Bitte helfen! Java Basics - Anfänger-Themen 4
H Kann man in Java einfach einen Beep erzeugen Java Basics - Anfänger-Themen 2
C einfach aber komisch Java Basics - Anfänger-Themen 5
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4
P Restart Button für einfach Applikation Java Basics - Anfänger-Themen 7
H RAF geht einfach nicht Java Basics - Anfänger-Themen 12
D RegEx Probleme - wahrscheinlich zu einfach. Java Basics - Anfänger-Themen 2
E einfach verkettete liste, nullPointerException Java Basics - Anfänger-Themen 5
H Einfach Datenübergabe Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
V If Schleife wird beim ausführen einfach ignoriert Java Basics - Anfänger-Themen 4
D Einfach Leerzeile einfügen ? Java Basics - Anfänger-Themen 2
G Owner von JDialog;Komme einfach nicht weiter Java Basics - Anfänger-Themen 4
B Applet geht einfach nicht Java Basics - Anfänger-Themen 16
S UIManager kann einfach nicht aufgelöst werden Java Basics - Anfänger-Themen 4
R Einfach if-Abfrage Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
A Einfach, gut erklärte Übungen!!! Java Basics - Anfänger-Themen 3
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
C Zyklisch verkette Liste - Pop() methode implementieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
C verkette liste sortieren? Java Basics - Anfänger-Themen 7
W Rekursion und verkette Liste Java Basics - Anfänger-Themen 5
K Verkette Listen Java Basics - Anfänger-Themen 13
K Verkette Listen ? Java Basics - Anfänger-Themen 6
L doppelt verkette Liste Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben