Exemple #1
0
        //在尾结点后插入新结点
        public void Add(T value)
        {
            CirNode <T> newNode = new CirNode <T>(value);

            //判断当前链表是否为空
            if (Count <= 0)
            {
                //插入的该节点就是尾节点  这里要注意是循环链表
                tail        = newNode;
                tail.Next   = tail;
                currentPrev = tail;
            }
            else
            {
                //当前循环链表非空 则插入到链表尾部

                //插入到链表末尾处
                newNode.Next = tail.Next;
                //改变当前节点  其实就是改变头结点的前驱节点
                if (currentPrev == tail)
                {
                    currentPrev = newNode;
                }
                //给新的尾节点赋值
                tail = newNode;
            }
            count++;
        }
Exemple #2
0
        //根据索引获取结点
        public CirNode <T> GetNodeByIndex(int index)
        {
            //先判断索引是否越界
            if (index < 0 || index > Count - 1)
            {
                throw new ArgumentOutOfRangeException("索引越界");
            }
            //根据指定的尾节点  来获取到表面意思上的头结点
            CirNode <T> tempNode = tail.Next;

            for (int i = 0; i < index; i++)
            {
                tempNode = tempNode.Next;
            }
            return(tempNode);
        }