예제 #1
0
        public bool AddItemAfterItem(T itemToAdd, T itemToFind)
        {
            if (itemToAdd == null)
            {
                return(false);
            }
            if (itemToFind == null)
            {
                return(Add(itemToAdd));
            }

            SingleLinkedListItem <T> foundItem = FindItem(itemToFind);

            if (foundItem == null)
            {
                return(Add(itemToAdd));
            }

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


            return(false);
        }
예제 #2
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);
            }

            else
            {
                SingleLinkedListItem <T> tmp = this._firstItem;


                while (tmp != null)
                {
                    if (tmp.NextItem != null)
                    {
                        if ((tmp.NextItem != null) && (tmp.NextItem.Item.Equals(itemToFind)))
                        {
                            return(tmp);
                        }

                        tmp = tmp.NextItem;
                    }
                }
                return(null);
            }
        }
예제 #3
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);
            }
            //1.Fall
            //erster Eintrag ist der gesuchte Eintrag
            bool isStartItem;
            SingleLinkedListItem <T> itemBeforeItemToRemove = FindItemBeforeItem(itemToRemove, out isStartItem);

            //Item ist nicht vorhanden
            if ((itemBeforeItemToRemove == null) && !isStartItem)
            {
                return(false);
            }
            //Gesuchter Eintrag ist erster Eintrag

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

            //letzter Eintrag

            if (itemBeforeItemToRemove.NextItem.NextItem == null)
            {
                this._lastItem          = itemBeforeItemToRemove;
                this._lastItem.NextItem = null;
                return(true);
            }
예제 #4
0
        public SingleLinkedListItem <T> FindItem(T itemToFind)
        {
            if (itemToFind == null)
            {
                return(null);
            }

            else
            {
                SingleLinkedListItem <T> tmp = this._firstItem;

                while (tmp != null)
                {
                    if (tmp.Item.Equals(itemToFind))
                    {
                        return(tmp);
                    }

                    tmp = tmp.NextItem;
                }
                return(null);
            }
        }
예제 #5
0
        public bool Add(T itemToAdd)
        {
            if (itemToAdd == null)
            {
                return(false);
            }

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


            //2.Fall
            else
            {
                this._lastItem.NextItem = new SingleLinkedListItem <T>(itemToAdd, null);
                this._lastItem          = this._lastItem.NextItem;
            }

            return(true);
        }
예제 #6
0
 public SingleLinkedList(SingleLinkedList <T> sll)
 {
     this._firstItem = sll._firstItem;
     this._lastItem  = sll._lastItem;
 }
예제 #7
0
 public SingleLinkedList(T item)
 {
     this._firstItem = new SingleLinkedListItem <T>(item, null);
     this._lastItem  = _firstItem;
 }
예제 #8
0
 public SingleLinkedList()
 {
     this._firstItem = null;
     this._lastItem  = null;
 }
예제 #9
0
        static void Main(string[] args)
        {
            //Klasse Person testen:
            
            Person p = new Person("Elias", "Rist", new DateTime(2001, 8, 24));
            // Console.WriteLine(p);

            Person p2 = new Person("Thomas", "Mairer", new DateTime(2001, 3, 4));
            Person p3 = new Person("Tobias", "Flökinger", new DateTime(2000, 7, 4));
            Person p4 = new Person("Christian", "Hölbling", new DateTime(2000, 7, 4));

            SingleLinkedList<Person> sll = new SingleLinkedList<Person>();
            
            sll.Add(p);
            sll.Add(p2);
            sll.Add(p3);
            sll.Add(p4);



            sll.ChangeItem(p2, p4);

            Console.WriteLine(sll);


            /*
            if (sll.Remove(null))
            {
                Console.WriteLine("Person wurde entfernt");
            }
            else
            {
                Console.WriteLine("Person wurde nicht entfernt - Parameter = null");
            }
            if (sll.Remove(p))
            {
                Console.WriteLine("Person wurde entfernt");
            }
            else
            {
                Console.WriteLine("Person wurde nicht entfernt - Parameter = null");
            }
            sll.Add(p);
            sll.Add(p2);
            sll.Add(p3);
            sll.Add(p4);
            //1.Fall
            if (sll.Remove(p3))
            {
                Console.WriteLine("Person wurde entfernt - Starteintrag wurde entfernt");
            }
            else
            {
                Console.WriteLine("Person wurde nicht entfernt - Starteintrag");
            }

            Console.WriteLine(sll);

            Console.WriteLine("-----");
            bool istStarteintrag;
            SingleLinkedListItem<Person> personBefore = new SingleLinkedListItem<Person>();

            personBefore = sll.FindItemBeforeItem(p2, out istStarteintrag);
            if (istStarteintrag)
            {
                Console.WriteLine("Es existiert kein Eintrag vor dem gesuchten Eintrag.");
                Console.WriteLine("Die gesuchte Person ist im Starteintrag enthalten!");
            }
            else if(personBefore != null)
            {
                Console.WriteLine("Item vor gesuchter Person existiert.");
                Console.WriteLine("Person vor der gesuchten Person lautet: ");
                Console.WriteLine(personBefore);
            }
            else
            {
                Console.WriteLine("gesuchte Person ist in dieser Liste nicht enthalten!");
            }

            */


            /*
            if(p == p2)
            {
                Console.WriteLine("p und p2 sing gleich: ==");
            }
            else
            {
                Console.WriteLine("p und p2 sind nicht gleich: ==");
            }

            if (p.Equals(p2))
            {
                Console.WriteLine("p und p2 sing gleich: Equals()");
            }
            else
            {
                Console.WriteLine("p und p2 sind nicht gleich: Equals()");
            }




            if (p == p3)
            {
                Console.WriteLine("p und p3 sing gleich: ==");
            }
            else
            {
                Console.WriteLine("p und p3 sind nicht gleich: ==");
            }

            if (p.Equals(p3))
            {
                Console.WriteLine("p und p3 sing gleich: Equals()");
            }
            else
            {
                Console.WriteLine("p und p3 sind nicht gleich: Equals()");
            }

            */
            Console.ReadKey();
            


            //SingleLinkedListItem testen:
            //generische Klasse verwenden:
            SingleLinkedListItem<Person> item = new SingleLinkedListItem<Person>(p, null);
            Console.WriteLine(item);

            //Klasse SSL testen
            //Methode Add() testen
            SingleLinkedList<Person> singleLL = new SingleLinkedList<Person>();
            if (singleLL.Add(p))
            {
                Console.WriteLine("Person wurde hinzugefügt!");
            }
            else
            {
                Console.WriteLine("Person konnte nicht hinzugefügt werden!");
            }
            if (singleLL.Add(new Person("Tobias", "Flöckinger", new DateTime(2000, 8, 13))))
            {
                Console.WriteLine("Person wurde hinzugefügt!");
            }
            else
            {
                Console.WriteLine("Person konnte nicht hinzugefügt werden!");
            }
            Console.WriteLine("Komplette SLL ausgeben:");
            Console.WriteLine(singleLL);
            


            Console.ReadKey();
        }