public Node(int info, Node prev, Node next)
 {
     this.info = info;
     this.prev = prev;
     this.next = next;
 }
        //public bool isHead{
        //}
        public object Clone(List list)
        {
            Node p = this.Next;

            Node first;
            Node last;
            Node prev;
            Node c;

            first = new Node(this.Info,null,null);

            last = first.Next;
            //prelast = first;

            prev = first;
            c=null;

            while (p!=list.Head){
                c.Prev.Next = c = new Node(p.Info,last,null);
                c.Prev = prev;
                prev=c;
                p = p.Next;
            }

            return first;
        }
 public void Remove(Node node)
 {
     Node fnode = head.Next.Next;
     while (node != head && fnode != node)
         fnode = fnode.Next;
     if (fnode == node)
     {
         fnode.Next.Prev = fnode.Prev;
         fnode.Prev.Next = fnode.Next;
     }
     else
         throw new InvalidOperationException("«аданный узел не принадлежит этому списку");
 }
        public void Add(Node pointer)
        {
            Node q = Head.Next;
            while (q!=Head){
                q=q.Next;
            }

            q.Next = pointer;
            pointer.Prev = q;
        }
 public int IndexOf(Node node)
 {
     Node buf = head.Next;
     int i = 0;
     while (buf != head && buf != node)
     {
         buf = buf.Next;
         i++;
     }
     if (buf == head)
         i = -1;
     return i;
 }
 public void Create(int[] values, string[] strValues)
 {
     if (head != null && values != null)
     {
         Node node;
         for (int i = values.Length - 1; i >= 0; i--)
         {
             node = new Node(values[i], head, head.Next);
             head.Next.Prev = node;
             head.Next = node;
         }
     }
 }
 public List()
 {
     head = new Node();
     head.Prev = head;
     head.Next = head;
 }
        public List Clone(bool attemptDeepCopy)
        {
            List listClone = new List();

            if (attemptDeepCopy)
            {

                Node prev = listClone.Head; // new Head
                Node c = Head.Next;
                Node q = null;
                while (c!=Head){
                    q = new Node(c.Info,null,null);
                    q.Prev = prev;
                    prev.Next = q;
                    c = c.Next;
                    prev = prev.Next;
                }

                q.Next = listClone.Head;

            }
            else
                listClone = (List)this.Clone();

            return listClone;
        }
        public void Add(int value)
        {
            Node q = new Node(value,Head.Prev,Head);
            Head.Prev = q;

            if (Head.Next = null) Head.Next =q;
        }