LinkedList Element löschen.
-
Hi,
ich habe eine LinkedList aus dem Internet an meine Bedürfnise angepasst. Funktioniert auch ganz Prima. Ich weiß nur nicht, wie ich ein Element löschen kann. Ich habe die LinkedList Einzellervolk genannt, nicht davon ablenken lassen.Man kann ja Objekt nicht selber löschen.
Hier ist das Programm:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace linkedlisttest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Einzellervolk Zellenliste = new Einzellervolk(new Einzeller()); Zellenliste.NeueZelleEinfuegen(new Einzeller()); Zellenliste.AktuelleZelle.name = "karl"; Zellenliste.Vorige_Zelle(); button1.Text = Zellenliste.AktuelleZelle.name; } } public class Einzeller { public string name = "heinz"; } public class Node { public Node Previous; public Node Next; public Einzeller Zelle; public Node(Node NewPrevNode, Node NewNextNode, Einzeller NeueZelle) { Previous = NewPrevNode; Next = NewNextNode; Zelle = NeueZelle; } } public class Einzellervolk { int Zellenanzahl = 1; Node nCurrent; Node StartNode; public Einzeller AktuelleZelle { get { return nCurrent.Zelle; } } public Einzellervolk(Einzeller NeueZelle) { nCurrent = new Node(null, null, NeueZelle); nCurrent.Next = null; nCurrent.Previous = null; StartNode = nCurrent; } public void NeueZelleEinfuegen(Einzeller NeueZelle) { if (nCurrent.Next == null) { nCurrent = nCurrent.Next = new Node(nCurrent, null, NeueZelle); } else { nCurrent = nCurrent.Next = new Node(nCurrent, nCurrent.Next, NeueZelle); } Zellenanzahl++; } public void AktiviereErsteZelle() { nCurrent=StartNode; } public void EntferneAktuelleZelle() { } public bool NechsteZelle() { if (nCurrent.Next == null) {return false;} else // If everything is OK { nCurrent = nCurrent.Next; return true; } } public bool Vorige_Zelle() { if (nCurrent.Previous == null) {return false;} else { nCurrent = nCurrent.Previous; return true; } } } }
-
Du änderst einfach den Next Member des vorherigen Nodes auf das nächste. Und änderst dann dein aktuellen Node auf das nächste/vorherige (kommt drauf an, was geschickter ist). Somit wird dein alter aktueller Node nirgends mehr referenziert und wird vom Garbagecollector geschluckt.
Prüfen, ob der aktuelle node der letzte/erste ist, musst du natürlich auch noch.
-
Cool, Danke!
-
Ich hab mir mal eben deine Seite angeschaut und gesehen, dass du dein Projekt nach C# konvertieren willst. Zu dem Zweck bietet die .Net-Bibliothek schon vorgefertigte Listen. Schau dir dazu mal "List<T>" im namespace System.Collections.Generic an.
(http://msdn2.microsoft.com/en-US/library/6sh2ey19.aspx)