public void display()
 {
     if (head != null)
     {
         CLLNode currentNode = head;
         do
         {
             Console.WriteLine(currentNode.data);
             currentNode = currentNode.next;
         } while (currentNode != head);
     }
 }
        public void removeFromEnd()
        {
            if (head == null)
            {
                return;
            }
            CLLNode currentNode = head;
            CLLNode prev        = currentNode;

            while (currentNode.next != head)
            {
                prev        = currentNode;
                currentNode = currentNode.next;
            }
            prev.next = head;
        }
        public void removeFromBegin()
        {
            if (head == null)
            {
                return;
            }

            CLLNode currentNode = head;

            while (currentNode.next != head)
            {
                currentNode = currentNode.next;
            }

            head             = head.next;
            currentNode.next = head;
            length--;
        }
        public void insertAfter(int data, int pos)
        {
            CLLNode node = new CLLNode(data);

            if (pos < 0)
            {
                pos = 0;
            }
            if (pos > length)
            {
                pos = length;
            }
            CLLNode currentNode = head;

            for (int i = 1; i < pos; i++)
            {
                currentNode = currentNode.next;
            }
            node.next        = currentNode.next;
            currentNode.next = node;
            length++;
        }
        public void insertAtEnd(int data)
        {
            CLLNode node = new CLLNode(data);

            if (head != null)
            {
                CLLNode currentNode = head;
                while (currentNode.next != head)
                {
                    currentNode = currentNode.next;
                }
                currentNode.next = node;
                node.next        = head;
                length++;
            }
            else
            {
                head      = node;
                node.next = node;
                length++;
            }
        }
        public void insertBegin(int data)
        {
            CLLNode node = new CLLNode(data);

            node.next = head;
            if (head != null)//if list is not empty
            {
                CLLNode currentNode = head;
                while (currentNode.next != head)
                {
                    currentNode = currentNode.next;
                }
                currentNode.next = node;
                head             = node;
                length++;
            }
            else//node is first node in circular list
            {
                node.next = node;
                head      = node;
                length++;
            }
        }
        public void insertBefore(int data, int pos)
        {
            CLLNode node = new CLLNode(data);

            if (pos < 0)
            {
                pos = 0;
            }
            if (pos > length)
            {
                pos = length;
            }
            CLLNode currentNode = head;
            CLLNode prev        = currentNode;

            for (int i = 1; i < pos; i++)
            {
                prev        = currentNode;
                currentNode = currentNode.next;
            }
            prev.next = node;
            node.next = currentNode;
            length++;
        }
 public CLLNode(int data)
 {
     this.data = data;
     next      = null;
 }