Verkettete Liste - Element löschen

Status
Nicht offen für weitere Antworten.

DasDogma

Mitglied
Hallo.

Ich schreibe derzeit ein Programm, das mit Hilfe einer verketteten Liste Integer-Werte speichert.
Dazu habe ich schon verschiedene Methoden geschrieben, die Elemente (am Anfang, am Ende und mittendrin) erzeugen, prüfen ob die Liste sortiert ist usw. Nun bin ich aber beim Problem Löschen angekommen. Dazu will ich eine Methode schreiben, die ein Listenelement an einer beliebigen Stelle löscht. Dazu wird in der Konsole dann der gewünschte Wert eines der Listenelemente eingegeben. Bisher habe ich es geschafft, dass das erste und letzte Element gelöscht werden kann. Nun stehe ich aber vor dem Problem, dass ich kein Element aus der Mitte löschen kann.

Ich habe zu diesem Problem natürlich schon google befragt und hier die Suchfunktion genutzt. Entweder fand ich nichts oder es war sehr unverständlich für mich.

Hier der gesamte Code (Die Problematische Stelle befindet sich in der Methode «entfernteElement(int i)»):

Code:
import java.util.Scanner;

public class ListenTest {
	static Scanner in = new Scanner(System.in);
	public static void main(String[] arg) {
		IntListe p = new IntListe();
		int op, val_in;
		System.out.println("1 - Anfügen am Anfang" +
						 "\n2 - Anzeigen der Elemente" +
						 "\n3 - Einfügen eines Elements" +
						 "\n4 - Entferne letztes Element" +
						 "\n5 - Prüfe ob sortiert\n");
		System.out.print("Auswahl: ");
		op = in.nextInt();
		System.out.println();
		while(op >= 0 && op < 8) {
			switch(op) {
				case 1:
					System.out.print("Wert: ");
					val_in = in.nextInt();
					p.anfuegenAmAnfang(val_in);
					break;
				case 2:
					p.ListeAnzeigen();
					break;				
				case 3:
					System.out.print("Wert: ");
					val_in = in.nextInt();
					p.einsortieren(val_in);
					break;
				case 4:
					p.entferneLetztes();
					break;
				case 5:
					System.out.println(p.sortiert());
					break;
				case 6:
					System.out.print("Wert: ");
					val_in = in.nextInt();
					p.anfuegenAmEnde(val_in);
					break;
				case 7:
					System.out.print("Wert: ");
					val_in = in.nextInt();
					p.entferneElement(val_in);
					break;
				case 0:
					System.exit(0);
			} //switch
			System.out.print("Auswahl: ");
			op = in.nextInt();
			System.out.println();
		} //while
	} //main
} //class ListenTest

class Knoten {
   	int k;           // Wert im Knoten (Informationsteil)
   	Knoten next;               // Adresse des nächsten Knoten in der Liste (Organisationsteil)
  	Knoten(int i, Knoten nex) { // Konstruktor
      	k = i;
      	next = nex;
   	}
}
//-----------------------------------------------------------------

class IntListe {

   	Knoten anker; // erster Knoten in der Liste
   	IntListe() { // Konstruktor
     	anker = null;
   	} //IntListe
   	/** Methode fügt an den Anfang der Liste ein neues Element ein */

   	void anfuegenAmAnfang(int zahl) {
      	Knoten p = new Knoten(zahl, anker);
      	anker = p;
   	} // anfuegenAmAnfang
   
	/** Methode zeigt alle Elemente der Liste im DOS-Fenster an */

   	void ListeAnzeigen() {
      	if(isEmpty()) {
         	System.out.println("Liste ist leer");
         	return;
      	} //if
      	Knoten p;
      	p = anker;
      	while (p != null) {
         	System.out.println(p.k);
         	p = p.next;
      	}//while
      	System.out.println();
   	} //ListeAnzeigen

 	/** Methode fügt in eine aufsteigend sortierte Liste die Zahl i an der richtigen Stelle ein,
        sodass die neue Liste wieder sortiert ist */

   	void einsortieren(int zahl) {
      	Knoten p;
      	if(isEmpty() ) // Liste war leer
         	anker = new Knoten(zahl, null);
      	else {
         	if(zahl < anker.k) { // neues erstes Element
            	anker = new Knoten(zahl, anker);
         	}
         	else {
            	p = anker;
            	while(p.next != null) {
               		if(zahl < p.next.k) { // einfuegen
                  		p.next = new Knoten(zahl, p.next);
                  		return;
               		}
               		p = p.next; // Zeiger auf's nähste Element setzen
            	} // while
            	p.next = new Knoten(zahl, null); // anfuegen
        	 } // else
      	} // else
   	} // einsortieren
 	
	void entferneLetztes() {
      	if( ! isEmpty() ) {
         	if(anker.next == null) // Liste hatte nur ein Element
              	anker = null;
         	else {
            	Knoten p;
            	p = anker;
            	while(p.next.next != null) p = p.next;
            	p.next = null;
         	} // else
      	} // if
   	} // entferneLetztes

	boolean isEmpty() {
		boolean empty_out;
		if(anker == null) {
			empty_out = true;
		} else {
			empty_out = false;
		} //end if
		return empty_out;
	} // isEmpty

	boolean sortiert() {
		boolean sort_out = true;
		if(isEmpty()) {
			System.out.println("Liste ist leer!");
		}//if
		Knoten p;
		p = anker;
		while(p.next != null) {
			if(p.k > p.next.k) {
				sort_out = false;
			}
			p = p.next;
		} //while
		return sort_out;
	} //sortiert

	void anfuegenAmEnde(int zahl) {
		Knoten p;
		p = anker;		
		while(p.next.next != null) {
			p = p.next;
		} //while
		p.next.next = new Knoten(zahl, null);
	} //anfuegenAmEnde

	void entferneElement(int i) {
		Knoten p;
		p = anker;
		if(i == anker.k) {			
			p = p.next;
			anker = p;
		} else if(i != anker.k) {
			while(i == p.k) {
				p = p.next;
			}
			Knoten del_node = p.next;
			p.next = del_node.next;
			del_node.next = null;
			
		}
	} //entferneElement

} // class Liste

Mit der while-Schleife soll das wünschte Element gefunden werden und der Code darunter soll es letztlich löschen. Nur tut er es leider nicht. Ich persönlich glaube, dass es an der while-Schleife, also am Finden des Elements scheitert.

Bei weiteren Fragen, fragt. Ich hoffe ihr könnt mir helfen.

Gruss,
Stefan.
 

Landei

Top Contributor
aus'm Kopp - ohne Gewähr
Code:
void entferneElement(int i) {
      if (anker != null) {
         if (anker.k == i) {
            anker = anker.next;
         } else {  
            Knoten p = anker;
            while(p.next != null && p.next.k != i) {
              p = p.next;
            }
            if (p.next != null) {
               p.next = p.next.next;
            }
         } 
      }
   }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
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
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
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
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
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