public bool Remove(T itemToRemove) { DoubelLinkedListItem <T> chosenOne = Find(itemToRemove, out bool isStartItem); if (itemToRemove == null) { return(false); } //1. Fall: Erstes Element wird entfernt if (isStartItem) { _firstItem.nextItem.ItemBefore = null; _firstItem = _firstItem.nextItem; return(true); } else //2.Fall irgendwo in der Mitte { if (chosenOne.nextItem == null) //3.Fall: das Element am Ende wird entfernt { chosenOne.ItemBefore.nextItem = null; } else { chosenOne.ItemBefore.nextItem = chosenOne.nextItem; chosenOne.nextItem.ItemBefore = chosenOne.ItemBefore; return(true); } } return(false); }
public DoubelLinkedListItem <T> FindRekursiv(T itemToFind, DoubelLinkedListItem <T> actItem = null) { if (itemToFind == null) //Parameter überpüfen { return(null); } if (this._firstItem == null) //DLL leer ? { return(null); } if (actItem == null) //actitem == null, bedeutet dass die find am Beginn der DLL starten soll { actItem = this._firstItem; } else //nach mehrmaligen aufruf, Zeiger aufs nächste Item setzen { actItem = actItem.nextItem; } if (actItem == null)//Ende der Liste ist erreicht , sonst wird auf actItem.nextItem gesetz { return(null); } else if (actItem.Item.Equals(itemToFind)) // gesuchtes Item gefunden { return(actItem); } else // Methode wird nocheinmal aufgerufen, mit actItem { return(FindRekursiv(itemToFind, actItem)); } }
public DoubelLinkedListItem <T> Find(T itemToFind, out bool isStartItem) { isStartItem = false; if (itemToFind == null) { return(null); } if (_firstItem == null) { return(null); } //1. Fall Object ist erster Eintrag if (this._firstItem.Item.Equals(itemToFind)) { isStartItem = true; return(_firstItem); } //2. Fall: irgendwo DoubelLinkedListItem <T> actItem = _firstItem; while (actItem != null) { if (actItem.Item.Equals(itemToFind)) { return(actItem); } actItem = actItem.nextItem; } return(null); }
public bool AddItemAfterItem(T itemToAdd, T targetItem) { if ((itemToAdd == null) || (targetItem == null)) { return(false); } bool isStartItem; DoubelLinkedListItem <T> chosenOne = Find(targetItem, out isStartItem); DoubelLinkedListItem <T> toAddItem = new DoubelLinkedListItem <T>(itemToAdd, null, null); DoubelLinkedListItem <T> actItem = _firstItem; while (actItem != null) { if (chosenOne.Item.Equals(actItem.Item)) { toAddItem.ItemBefore = actItem; toAddItem.nextItem = actItem.nextItem; actItem.nextItem = toAddItem; actItem.nextItem.ItemBefore = toAddItem; return(true); } actItem = actItem.nextItem; } return(false); }
public bool Change(T itemToChange, T newItem) { if (itemToChange == null) { return(false); } bool isStartItem; DoubelLinkedListItem <T> chosenOne = Find(itemToChange, out isStartItem); DoubelLinkedListItem <T> actItem = this._firstItem; while (actItem != null) { if (chosenOne.Item.Equals(actItem.Item)) { actItem.Item = newItem; } actItem = actItem.nextItem; } return(false); }
public override string ToString() { string s = ""; if (this._firstItem != null) { DoubelLinkedListItem <T> actItem = this._firstItem; while (actItem != null) { s += actItem.Item.ToString() + "\n"; actItem = actItem.nextItem; } } if (s == "") { return(" no Item"); } return(s); }
public bool Add(T itemToAdd) { if (itemToAdd == null) { return(false); } //1. Fall: das erste Item in der Liste if (_firstItem == null) { _firstItem = new DoubelLinkedListItem <T>(itemToAdd, null, null); _lastItem = _firstItem; return(true); } else { DoubelLinkedListItem <T> toAdd = new DoubelLinkedListItem <T>(itemToAdd, _lastItem, null); this._lastItem.nextItem = toAdd; this._lastItem = toAdd; return(true); } }
public DoubelLinkedListItem(T p, DoubelLinkedListItem <T> ItemBefore, DoubelLinkedListItem <T> nextItem) { this.Item = p; this.ItemBefore = ItemBefore; this.nextItem = nextItem; }
public DoubleLinkedList(DoubleLinkedList <T> dll) { this._firstItem = dll._firstItem; this._lastItem = dll._lastItem; }
public DoubleLinkedList(T item) { this._firstItem = new DoubelLinkedListItem <T>(item, null, null); this._lastItem = _firstItem; }
public DoubleLinkedList() { this._firstItem = null; this._lastItem = null; }