Verkettete Liste.

V

Verkettet

Gast
Hallo Leute,

ich habe hier eine verkettete Liste und verstehe an einem bestimmten Punkt etwas nicht.
Habe die entsprechende Stelle markiert.

Java:
class List
{
        private Node head = null;
        
        private class Node
        {
                private Data data;
                private Node next;

                public Node(Data data, Node node)
                {
                        this.data= data;
                        next = node;
                }
        }

        public void insert(Data data)
        {
                Node node = head;
               
                 if (node == null || node.data.nr > data.nr)
                {
                        head = new Node (data, node);
                }
                else
                {
                        while (node.next != null)
                {

                if (node.next.data.nr > data.nr)
                {
                        break;
                }
                node = node.next;
        }
        node.next = new Node (data, node.next);  // HIER, das verstehe ich nicht
}

Wir sagen node.next = new Node und sagen dann, das das nächste Element
das Element selbst ist? Oder komme ich da irgendwo durcheinander?

Wenn ich Node.next erzeuge kann ich doch nicht sagen das Node.next der nächste
Knoten ist oder?
 
V

Verkettet

Gast
Hier fehlt lediglich eine schließende Klammer hab ich bemerkt,
ansonsten kompiliert es. Ja!
 

JavaProfi

Aktives Mitglied
Wo hast du denn dieses Beispiel her?
Sorry, wenn ich das so sage, aber als Beispiel für eine einfach verkette Liste ungeeignet.Oder fehlt da Code?
Wenn du mal ein einfaches Beispiel für eine einfach verkettete oder doppelt verkettete Liste benötigst, schreibe ich dir ein KSKB, an dem du besser Lernen kannst.



Gruß
JP
 
Zuletzt bearbeitet:
V

Verkettet

Gast
Hier mal mein Kompletter Code in bisschen übersichtlicherer Form

Liste:
Java:
package test;

public class Liste {
	private Node head = null;

	private class Node {
		private Data data;
		private Node next;

		public Node(Data data, Node node) {
			this.data = data;
			next = node;
		}
	}

	public void insert(Data data) {
		Node node = head;

		if (node == null || node.data.nr > data.nr) {
			head = new Node(data, node);
		} else {
			while (node.next != null) {

				if (node.next.data.nr > data.nr) {
					break;
				}
				node = node.next;
			}
			node.next = new Node(data, node.next); // HIER, das verstehe ich
													// nicht
		}
	}

	public void delete(int nr) {
		Node node = head;

		if (node != null) {
			if (node.data.nr == nr) {
				head = node.next;
			} else {
				while (node.next != null) {
					if (node.next.data.nr == nr) {
						node.next = node.next.next;
						break;
					}
					node = node.next;
				}
			}
		}
	}

	public Data member(int nr) {
		Node node = head;

		while (node != null) {
			if (node.data.nr == nr) {
				return node.data;
			}
			node = node.next;
		}
		return null;
	}

	public void print() {
		Node node = head;

		while (node != null) {
			System.out.println(node.data);
			node = node.next;
		}
		System.out.println();
	}
}

Data:
Java:
package test;

public class Data {
	public int nr = 0;
	
	public Data(int nr) {
		this.nr = nr;
	}
	
	public String toString() {
		return "" + nr;
	}
}

Main:
Java:
package test;

public class Main {
	public static void main(String[] args) {
		Data eins = new Data(1);
		Data zwei = new Data(2);
		Data drei = new Data(3);
		Data vier = new Data(4);
		
		Liste liste = new Liste();
		liste.insert(zwei);
		liste.print();
		liste.insert(drei);
		liste.print();
		liste.insert(eins);
		liste.print();
		liste.insert(vier);
		liste.print();
	}
}

Das funktioniert alles wunderbar so wie es soll, nur wie gesagt ich verstehe nicht warum
dem node.next node.next als nächstes Element übergeben werden muss und nicht node.next.next....
 
V

Verkettet

Gast
Ich glaube ich habe es verstanden, wäre aber nett wenn das jemand bestätigen könnte.

In node.next steht z.B. null drin.
Jetzt erzeuge ich einen neuen Knoten:

new Node(data, node.next)

und weiße das meinem next zu:

node.next = new Node(data, node.next)

Dann wird ganz einfach aus meinem null ein New Node und im neuen Knoten
wird das next auf null gesetzt.



Beispiel für node.next = 4;

node.next = new Node(data, node.next)

Es wird eine eine Node eingefügt die kleiner 4 ist dann wird node.next
die neue Zahl zugewisen (new Node(data,..)) und node.next auf 4 gesetzt.

Richtig so?
 

AquaBall

Top Contributor
Ist schon richtig, (deshalb funktionierts auch :lol:).
Java:
node = head;
...
node.next = new Node(data, node.next)

Du beginnst oben, wanderst evtl. weiter.
Letzlich stehst du an einer Stelle, an der du einen neuen Knoten einfügen willst.
Du gibst diesem node ein neues Objekt, und diese (neue) Objekt zeigt auf den (noch) alten Nachfolger, damit die Reihe wieder angeknüpft wird.

Du könntest auch ausführlicher schreiben:
Java:
insertStelle = head;
...
Node neuerKnoten = new Node(data, insertStelle.next); // Der neue Knoten soll den Rest der Reihen anhängen.
insertStelle.next = neuerKnoten
(Ich würde auch nicht alles nur 'node' nennen, sondern sprechendere Namen geben.)
 

Dekker

Bekanntes Mitglied
Der Grund für die Zeile ist einfach folgender:

Wenn du dir den Code ansiehst, wird mittels node = node.next solange ein knoten gesucht, bis node.next.data.nr > data.nr oder eben node.next != null gilt. Warum man das nicht beides in der whilebedingung prüft verstehe ich nicht, da man eigentlich nur die von mir zuerst genannte Bedingung negieren müsste.

Im Grunde genommen wird dann ein neuer Knoten als Nachfolger der somit bestimmten Node eingesetzt. Natürlich musst du dann aber den Nachfolger deines neuen Knotens auf den alten Knoten next des Knotens setzen, in dem er eingesetzt wird. Ansonsten verlierst du nämlich alle Knoten nach deinem neuen Knoten. Ein Beispiel:

Liste sieht so aus:

1->5->6->9->null

insert(4)

1->4->5->6->9->null

Wenn du den node.next von 1 (was in diesem Falle 5 wäre) nicht übernimmst, würde deine Liste wie folgt aussehen

1->4->null

Somit wäre deine Liste ab 4 gelöscht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
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
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
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
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