static void Main(string[] args)
        {
            //Single Linked List
            SinglyLinkedList singleList = new SinglyLinkedList();

            singleList.AddToLinkedList("A");
            singleList.AddToLinkedList("B");
            singleList.AddToLinkedList("C");
            singleList.AddToLinkedList("D");
            singleList.AddToLinkedList("E");

            singleList.DisplayAllItems();
            Console.ReadLine();

            //Double Linked List
            DoubleLinkedList list = new DoubleLinkedList();

            list.Insert("A");
            list.Insert("B");
            list.Insert("C");

            DoubleLink link4 = list.Insert("D");

            list.Insert("E");
            Console.WriteLine("List: " + list);

            list.InsertAfter(link4, "[4a]");
            Console.WriteLine("List: " + list);
            Console.Read();
        }
        public override string ToString()
        {
            DoubleLink    currentLink = _first;
            StringBuilder builder     = new StringBuilder();

            while (currentLink != null)
            {
                builder.Append(currentLink);
                currentLink = currentLink.NextLink;
            }
            return(builder.ToString());
        }
        public DoubleLink Delete()
        {
            DoubleLink f = _first;

            if (_first != null)
            {
                _first = _first.NextLink;
                if (_first != null)
                {
                    _first.PreviousLink = null;
                }
            }
            return(f);
        }
        public DoubleLink Insert(string title)
        {
            // Creates a link
            DoubleLink link = new DoubleLink(title);

            //makes it the first item in the list
            link.NextLink = _first;

            if (_first != null)
            {
                _first.PreviousLink = link;
            }
            _first = link;
            return(link);
        }
        public void InsertAfter(DoubleLink link, string title)
        {
            if (link == null || string.IsNullOrEmpty(title))
            {
                return;
            }
            DoubleLink newLink = new DoubleLink(title);

            newLink.PreviousLink = link;
            // Update the 'after' link's next reference, so its previous points to the new one
            if (link.NextLink != null)
            {
                link.NextLink.PreviousLink = newLink;
            }
            // Steal the next link of the node, and set the after so it links to our new one
            newLink.NextLink = link.NextLink;
            link.NextLink    = newLink;
        }
 public DoubleLinkedList()
 {
     _first = null;
 }