public SingleLinkedListItem <T> Find(T itemToFind)
        {
            if (itemToFind == null)
            {
                return(null);
            }

            if (this._firstItem == null)
            {
                return(null);
            }

            SingleLinkedListItem <T> actItem = this._firstItem;


            while (actItem != null)
            {
                if (actItem.Item.Equals(itemToFind))
                {
                    return(actItem);
                }
                actItem = actItem.NextItem;
            }
            return(null);
        }
示例#2
0
        public bool AddItemAfterItem(T itemToAdd, T itemBefore)
        {
            if (itemToAdd == null || itemBefore == null)
            {
                return(false);
            }

            if (this._firstItem == null)
            {
                return(Add(itemToAdd));
            }

            SingleLinkedListItem <T> actItem = this._firstItem;

            while (actItem != null)
            {
                if (actItem.Item == itemBefore)
                {
                    actItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, actItem.NextItem);
                }
                actItem = actItem.NextItem;
            }

            return(true);
        }
        public SingleLinkedListItem <T> FindItemBeforeItemToFind(T itemToFind, out bool isStartItem)
        {
            isStartItem = false;
            if (itemToFind == null)
            {
                return(null);
            }

            if (this._firstItem == null)
            {
                return(null);
            }

            if (this._firstItem.Item.Equals(itemToFind))
            {
                isStartItem = true;
                return(null);
            }

            SingleLinkedListItem <T> actItem = this._firstItem;

            while (actItem != null)
            {
                if ((actItem.NextItem != null) && (actItem.NextItem.Item.Equals(itemToFind)))
                {
                    return(actItem);
                }
                actItem = actItem.NextItem;
            }
            return(null);
        }
        public bool Change(T itemToChange, T itemNewData)
        {
            if ((itemToChange == null) || (itemNewData == null))
            {
                return(false);
            }


            if (this._firstItem == null)
            {
                return(false);
            }

            SingleLinkedListItem <T> foundItem = Find(itemToChange);


            if (foundItem == null)
            {
                return(false);
            }
            else
            {
                foundItem.Item = itemNewData;
                return(true);
            }
        }
示例#5
0
        public SingleLinkedListItem <T> FindItemBeforeItem(T itemToFind, out bool isStartItem)
        {
            isStartItem = false;
            if (itemToFind == null)
            {
                return(null);
            }

            if (this._firstItem == null)
            {
                return(null);
            }

            if (this._firstItem.Item.Equals(itemToFind))
            {
                isStartItem = true;
                return(null);
            }

            SingleLinkedListItem <T> pointer = this._firstItem;

            while (pointer != null)
            {
                if ((pointer.NextItem != null) && (pointer.NextItem.Item.Equals(itemToFind)))
                {
                    return(pointer);
                }
                pointer = pointer.NextItem;
            }
            return(null);
        }
        public bool ChangeItem(T itemToChange, T itemNewData)
        {
            if (itemToChange == null)
            {
                return(false);
            }
            if (itemNewData == null)
            {
                return(false);
            }
            if (this._firstItem == null)
            {
                return(false);
            }
            SingleLinkedListItem <T> foundItem = Find(itemToChange);

            // Item ist nicht vorhanden
            if (foundItem == null)
            {
                return(false);
            }
            else
            {
                foundItem.Item = itemNewData;
                return(true);
            }
        }
        public bool Remove(T itemToRemove)


        {
            if (itemToRemove == null)
            {
                return(false);
            }

            // es existiert noch kein Eintrag in der Liste
            if (this._firstItem == null)
            {
                return(false);
            }

            bool isFirstItem;
            SingleLinkedListItem <T> itemBeforeItemToRemove = this.FindItemBeforeItemToFind(itemToRemove, out isFirstItem);

            // Item ist nicht vorhanden
            if ((itemBeforeItemToRemove == null) && !isFirstItem)
            {
                return(false);
            }


            // 1ter Fall: 1ter Eintrag
            // 1ter Eintrag ist der gesuchte Eintrag
            if (isFirstItem)
            {
                this._firstItem = this._firstItem.NextItem;
                return(true);
            }

            // 2ter Fall: irgendwo zw. _firstItem und _lastItem
            if (itemBeforeItemToRemove.NextItem.NextItem == null)
            {
                this._lastItem          = itemBeforeItemToRemove;
                this._lastItem.NextItem = null;
                return(true);
            }

            // 3ter Fall: es handelt sich um den letzten Eintrag
            else
            {
                itemBeforeItemToRemove.NextItem = itemBeforeItemToRemove.NextItem.NextItem;
                return(true);
            }
        }
        public void AddAfter(T itemToAdd, T itemToFind)
        {
            SingleLinkedListItem <T> actItem = this._firstItem;

            do
            {
                if (actItem.Item.Equals(itemToFind))
                {
                    actItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, null);
                    actItem          = actItem.NextItem;
                }
                else
                {
                    Add(itemToAdd);
                }
            } while (actItem == this._lastItem);
        }
示例#9
0
        public bool ChangeItem(T itemToFind, T newData)
        {
            if (newData == null)
            {
                return(false);
            }

            SingleLinkedListItem <T> foundItem = Find(itemToFind);

            if (foundItem == null)
            {
                return(false);
            }

            foundItem.Item = newData;

            return(true);
        }
        public bool Remove(T itemToRemove)
        {
            if (itemToRemove == null)
            {
                return(false);
            }
            // es existiert noch kein Eintrag in der Liste
            if (this._firstItem == null)
            {
                return(false);
            }

            bool isFirstItem;
            SingleLinkedListItem <T> itemBeforeItemToRemove = this.FindItemBeforeItemToFind(itemToRemove, out isFirstItem);

            // 1. Fall: 1. Eintag
            // 1. Eintrag ist der gesuchte Eintrag
            if ((itemBeforeItemToRemove == null) && !isFirstItem)
            {
                return(false);
            }
            if (isFirstItem)
            {
                this._firstItem = this._firstItem.NextItem;
                return(true);
            }
            // 2. Fall:  es handelt sich um den letzten Eintrag
            SingleLinkedListItem <T> actItem = this._firstItem;

            if (itemBeforeItemToRemove.NextItem.NextItem == null)
            {
                this._lastItem          = itemBeforeItemToRemove;
                this._lastItem.NextItem = null;
                return(true);
            }
            // 3. Fall: irgentwo zwischen _firstItem und _lastItem
            else
            {
                itemBeforeItemToRemove.NextItem = itemBeforeItemToRemove.NextItem.NextItem;
                return(true);
            }
        }
示例#11
0
        public override string ToString()
        {
            string s = "";

            if (this._firstItem != null)
            {
                SingleLinkedListItem <T> actItem = this._firstItem;
                while (actItem != null)
                {
                    s      += actItem.Item.ToString() + "\n";
                    actItem = actItem.NextItem;
                }
            }

            if (s == "")
            {
                return("no item");
            }
            return(s);
        }
示例#12
0
        public SingleLinkedListItem <T> Find(T itemToFind)
        {
            SingleLinkedListItem <T> pointer = this._firstItem;

            if ((_firstItem == null) || (itemToFind == null))
            {
                return(null);
            }


            while (pointer != null)
            {
                if (pointer.Item.Equals(itemToFind))
                {
                    return(pointer);
                }
                pointer = pointer.NextItem;
            }
            return(null);
        }
示例#13
0
        public bool Change(T itemToReplace, T itemNewData)
        {
            //Parameter überprüfen
            if ((itemToReplace == null) || (itemNewData == null) || (this._firstItem == null))
            {
                return(false);
            }


            SingleLinkedListItem <T> itemToChange = Find(itemToReplace);

            if (itemToChange == null)
            {
                return(false);
            }
            else
            {
                itemToChange.Item = itemNewData;
                return(true);
            }
        }
        // Methode Add
        public bool Add(T itemToAdd)
        {
            // 1. Parameter überprüfen
            if (itemToAdd == null)
            {
                return(false);
            }

            // 1. Fall: die SLL ist leer
            if (this._firstItem == null)
            {
                this._firstItem = new SingleLinkedListItem <T>(itemToAdd, null);
                this._lastItem  = this._firstItem;
            }
            // 2. Fall: die SLL ist nicht leer
            else
            {
                this._lastItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, null);
                this._lastItem          = this._lastItem.NextItem;
            }
            return(true);
        }
示例#15
0
        public bool Add(T itemToAdd)
        {
            //Parameter überprüfen
            if (itemToAdd == null)
            {
                return(false);
            }

            //1. Fall: SLL ist leer
            if (this._firstItem == null)
            {
                _firstItem = new SingleLinkedListItem <T>(itemToAdd, null);
                _lastItem  = _firstItem;
            }

            //2. Fall: SLL beinhaltet Elemente
            else
            {
                this._lastItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, null);
                this._lastItem          = this._lastItem.NextItem;
            }
            return(true);
        }
        public bool AddAfter(T itemToAdd, T itemToFind)
        {
            if (itemToAdd == null)
            {
                return(false);
            }

            SingleLinkedListItem <T> actItem = this._firstItem;

            do
            {
                if (actItem.Item.Equals(itemToFind))
                {
                    actItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, actItem.NextItem);
                    actItem          = actItem.NextItem;
                }
                else
                {
                    Add(itemToAdd);
                }
            } while (actItem == this._lastItem);
            return(true);
        }
示例#17
0
        public bool AddAfterItem(T itemToFind, T itemToAdd)
        {
            SingleLinkedListItem <T> foundItem = new SingleLinkedListItem <T>();


            //Parameter überprüfen
            if (itemToAdd == null)
            {
                return(false);
            }

            if (this._firstItem != null)
            {
                SingleLinkedListItem <T> actItem = this._firstItem;
                while (actItem != null)
                {
                    if (actItem.Equals(itemToFind))
                    {
                        foundItem = actItem;
                        actItem   = null;
                    }
                }
            }

            if (foundItem != null)
            {
                foundItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, foundItem.NextItem);
            }
            else
            {
                this._lastItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, null);
                this._lastItem          = this._lastItem.NextItem;
            }

            return(true);
        }
示例#18
0
 public SingleLinkedList(SingleLinkedList <T> sll)
 {
     this._firstItem = sll._firstItem;
     this._lastItem  = sll._lastItem;
 }
示例#19
0
 public SingleLinkedList(T item)
 {
     this._firstItem = new SingleLinkedListItem <T>(item, null);
     this._lastItem  = _firstItem;
 }
示例#20
0
 public SingleLinkedList()
 {
     this._firstItem = null;
     this._lastItem  = null;
 }
示例#21
0
 public SingleLinkedListItem(T p, SingleLinkedListItem <T> nextItem)
 {
     this.Item     = p;
     this.NextItem = nextItem;
 }
 public SingleLinkedList(SingleLinkedList <T> list)
 {
     this._firstItem = list._firstItem;
     this._lastItem  = list._lastItem;
 }
示例#23
0
 public SingleLinkedListItem(T item, SingleLinkedListItem <T> nextItem)
 {
     this.Item     = item;
     this.NextItem = nextItem;
 }
示例#24
0
        public bool Remove(T itemToRemove)
        {
            if (itemToRemove == null)
            {
                return(false);
            }
            //es existiert noch kein Eintrag in der Liste
            if (this._firstItem == null)
            {
                return(false);
            }

            bool isFirstItem;
            SingleLinkedListItem <T> itemBeforeItemToRemove = this.FindItemBeforeItem(itemToRemove, out isFirstItem);

            //Item ist nicht vorhanden
            if ((itemBeforeItemToRemove == null) && (!isFirstItem))
            {
                return(false);
            }

            //1ter Fall
            //1ter Eintrag ist der gesuchte Eintrag
            if (isFirstItem)
            {
                this._firstItem = this._firstItem.NextItem;
                return(true);
            }

            //2ter Fall : irgendwo zw firstItem und LastItem
            if (itemBeforeItemToRemove.NextItem.NextItem == null)
            {
                this._lastItem          = itemBeforeItemToRemove;
                this._lastItem.NextItem = null;
                return(true);
            }

            //3ter Fall: es handelt sich um de letzten Eintrag
            if (itemBeforeItemToRemove.NextItem == itemToRemove)
            {
                itemBeforeItemToRemove.NextItem = itemBeforeItemToRemove.NextItem.NextItem;
                return(true);
            }

            return(false);



            //1ter Fall : 1ter Eintrag
            //1ter Eintrag ist der gesuchte Eintrag

            /*if (itemToRemove.Equals(this._firstItem.Item))
             * {
             *  this._firstItem = this._firstItem.NextItem;
             *  return true;
             * }
             *
             * //2ter Fall : irgendwo zw _firstItem und _lastItem
             *
             * SingleLinkedListItem<T> actItem = this._firstItem;
             * while(actItem != null)
             * {
             *  if (actItem.NextItem != null)
             *  {
             *      if (actItem.NextItem.Item.Equals(itemToRemove))
             *      {
             *          actItem.NextItem = actItem.NextItem.NextItem;
             *          return true;
             *      }
             *  }
             *  actItem = actItem.NextItem;
             * }
             *
             *
             * //3ter Fall: es handelt sich um den letzten Eintrag
             * actItem = this._firstItem;
             *
             *
             *
             * while (actItem.NextItem != this._lastItem)
             * {
             *  actItem = actItem.NextItem;
             * }
             *  if (actItem.NextItem.Item.Equals(itemToRemove))
             *  {
             *      this._lastItem = actItem;
             *      this._lastItem.NextItem = null;
             *      return true;
             *  }
             *  return false;
             */
        }