示例#1
0
        public void PopBack()
        {
            if (Head == null)
            {
                throw new Exception("ERROR: empty list");
            }

            if (Head == Tail)
            {
                Head = null;
                Tail = null;
                return;
            }

            Tail      = Tail.Prev;
            Tail.Next = null;
        }
示例#2
0
        public override string ToString()
        {
            if (Head == null)
            {
                return("NULL");
            }

            string toString = Head.Key + "->";

            DoublyNode curr = Head;

            while (curr.Next != null)
            {
                curr      = curr.Next;
                toString += curr.Key;
                toString += "->";
            }

            return(toString);
        }
示例#3
0
        public void PushBack(int key)
        {
            var node = new DoublyNode()
            {
                Key  = key,
                Next = null
            };

            if (Tail == null)
            {
                Head      = node;
                Tail      = node;
                node.Prev = null;
            }
            else
            {
                node.Prev = Tail;
                Tail.Next = node;
                Tail      = node;
            }
        }
示例#4
0
        public void AddAfter(DoublyNode node, int key)
        {
            var newNode = new DoublyNode()
            {
                Key  = key,
                Next = node.Next,
                Prev = node
            };

            node.Next = newNode;

            //devo aggiornare il nodo precedente a quello successivo a newnode
            if (newNode.Next != null)
            {
                newNode.Next.Prev = newNode;
            }

            if (Tail == node)
            {
                Tail = newNode;
            }
        }
示例#5
0
        public void PushFront(int key)
        {
            var node = new DoublyNode()
            {
                Key  = key,
                Next = Head,
                Prev = null
            };

            if (Head != null)
            {
                Head.Prev = node;
            }
            Head = node;

            //Se la coda non punta ad alcuna parte vuol dire che prima la lista era vuota e
            //il nuovo nodo è il primo nodo, quindi faccio puntare la tail all'unico elemento inserito
            if (Tail == null)
            {
                Tail = Head;
            }
        }