public IEnumerable <string> BackEnumerator()
        {
            DoubleNode current = tail;

            while (current != null)
            {
                yield return(current.Data);

                current = current.Previous;
            }
        }
        IEnumerator <string> IEnumerable <string> .GetEnumerator()
        {
            DoubleNode current = head;

            while (current != null)
            {
                yield return(current.Data);

                current = current.Next;
            }
        }
        public bool Contains(string data)
        {
            DoubleNode current = head;

            while (current != null)
            {
                if (current.Data.Equals(data))
                {
                    return(true);
                }

                current = current.Next;
            }
            return(false);
        }
        public void Add(string data)
        {
            DoubleNode node = new DoubleNode(data);

            if (head == null)
            {
                head = node;
            }
            else
            {
                tail.Next     = node;
                node.Previous = tail;
            }
            tail = node;
            count++;
        }
        public void AddFirst(string data)
        {
            DoubleNode node = new DoubleNode(data);
            DoubleNode temp = head;

            node.Next = temp;
            head      = node;
            if (count == 0)
            {
                tail = head;
            }

            else
            {
                temp.Previous = node;
            }
            count++;
        }
        public void Deserialize(FileStream stream)
        {
            List <DoubleNode> arr  = new List <DoubleNode>();
            DoubleNode        temp = new DoubleNode();
            int Count = 0;

            head = temp;
            string line;

            try
            { using (StreamReader StreamRead = new StreamReader(stream))
              { while ((line = StreamRead.ReadLine()) != null)
                {
                    if (!line.Equals(""))
                    {
                        Count++;
                        temp.Data = line;
                        DoubleNode next = new DoubleNode();
                        temp.Next = next;
                        arr.Add(temp);
                        next.Previous = temp;
                        temp          = next;
                    }
                }
              }
              tail      = temp.Previous;
              tail.Next = null;

              foreach (DoubleNode n in arr)
              {
                  n.Data = n.Data.Split(':')[0];
              }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.Read();
                Environment.Exit(0);
            }
        }
        public bool Remove(string data)
        {
            DoubleNode current = head;

            while (current != null)
            {
                if (current.Data.Equals(data))
                {
                    break;
                }
                current = current.Next;
            }
            if (current != null)
            {
                if (current.Next != null)
                {
                    current.Next.Previous = current.Previous;
                }
                else
                {
                    tail = current.Previous;
                }

                if (current.Previous != null)
                {
                    current.Previous.Next = current.Next;
                }
                else
                {
                    head = current.Next;
                }

                count--;
                return(true);
            }
            return(false);
        }
 public void Clear()
 {
     head  = null;
     tail  = null;
     count = 0;
 }