/// <summary>
        /// Returns true if the list contains the specified item,
        /// false otherwise.
        /// </summary>
        /// <param name="item">The item to search for</param>
        /// <returns>True if the item is found, false otherwise.</returns>
        public bool Contains(T item)
        {
            DoublyLinkedListNode <T> current = Head;

            while (current != null)
            {
                // Head -> 3 -> 5 -> 7
                // Value: 5
                if (current.Value.Equals(item))
                {
                    return(true);
                }

                current = current.Next;
            }

            return(false);
        }
Beispiel #2
0
        public void Add(T item)
        {
            var nodeToAdd = new DoublyLinkedListNode <T>(item);

            if (Tail == null)
            {
                Head = Tail = nodeToAdd;
            }
            else
            {
                Tail.Next          = nodeToAdd;
                nodeToAdd.Previous = Tail;

                Tail = nodeToAdd;
            }

            ++Count;
        }
        /// <summary>
        /// Add the node to the end of the list
        /// </summary>
        /// <param name="value">The node to add</param>
        public void AddLast(DoublyLinkedListNode <T> node)
        {
            if (Count == 0)
            {
                Head = node;
            }
            else
            {
                Tail.Next = node;

                // Before: Head -> 3 <-> 5 -> null
                // After:  Head -> 3 <-> 5 <-> 7 -> null
                // 7.Previous = 5
                node.Previous = Tail;
            }

            Tail = node;
            Count++;
        }
Beispiel #4
0
        public bool Remove(T item)
        {
            var current = Head;

            while (current != null)
            {
                if (current.Value.CompareTo(item) == 0)
                {
                    //are we at head
                    if (current.Previous == null)
                    {
                        //is head and tail same
                        if (current.Next == null)
                        {
                            Clear();
                            return(true);
                        }

                        Head          = current;
                        Head.Previous = null;
                    }
                    // are we at tail
                    else if (current.Next == null)
                    {
                        Tail      = current.Previous;
                        Tail.Next = null;
                    }
                    else
                    {
                        current.Previous.Next = current.Next;
                        current.Next.Previous = current.Previous;
                    }

                    --Count;
                    return(true);
                }

                current = current.Next;
            }

            return(false);
        }
        /// <summary>
        /// Removes the last node from the list
        /// </summary>
        public void RemoveLast()
        {
            if (Count != 0)
            {
                if (Count == 1)
                {
                    Head = null;
                    Tail = null;
                }
                else
                {
                    // Before: Head --> 3 --> 5 --> 7
                    //         Tail = 7
                    // After:  Head --> 3 --> 5 --> null
                    //         Tail = 5
                    // Null out 5's Next pointer
                    Tail.Previous.Next = null;
                    Tail = Tail.Previous;
                }

                Count--;
            }
        }
        /// <summary>
        /// Removes the first node from the list.
        /// </summary>
        public void RemoveFirst()
        {
            if (Count != 0)
            {
                // Before: Head -> 3 <-> 5
                // After:  Head -------> 5

                // Head -> 3 -> null
                // Head ------> null
                Head = Head.Next;

                Count--;

                if (Count == 0)
                {
                    Tail = null;
                }
                else
                {
                    // 5.Previous was 3, now null
                    Head.Previous = null;
                }
            }
        }
Beispiel #7
0
 public void Clear()
 {
     Head  = null;
     Tail  = null;
     Count = 0;
 }