Example #1
0
            private BdNode <T> GetNode(int index)
            {
                if (index < 0 || index > _size)
                {
                    throw new IndexOutOfRangeException("索引溢出或链表为空");
                }
                if (index < _size / 2)//正向查找
                {
                    BdNode <T> node = _linkHead.Next;
                    for (int i = 0; i < index; i++)
                    {
                        node = node.Next;
                    }
                    return(node);
                }
                //方向查询
                BdNode <T> rnode  = _linkHead.Prev;
                int        rindex = _size - index - 1;

                for (int i = 0; i < rindex; i++)
                {
                    rnode = rnode.Prev;
                }
                return(rnode);
            }
Example #2
0
            private int _size;                     //节点个数

            public DoubleLink()
            {
                _linkHead      = new BdNode <T>(default(T), null, null);
                _linkHead.Prev = _linkHead;
                _linkHead.Next = _linkHead;
                _size          = 0;
            }
Example #3
0
            public void Del(int index)
            {
                BdNode <T> inode = GetNode(index);

                inode.Prev.Next = inode.Next;
                inode.Next.Prev = inode.Prev;
                _size--;
            }
Example #4
0
 // 将节点插入到第index位置之前
 public void Insert(int index, T t)
 {
     if (_size < 1 || index >= _size)
     {
         throw new IndexOutOfRangeException("索引溢出或链表为空");
     }
     if (index == 0)
     {
         Append(_size, t);
     }
     else
     {
         BdNode <T> inode = GetNode(index);
         BdNode <T> tnode = new BdNode <T>(t, inode.Prev, inode);
         inode.Prev.Next = tnode;
         inode.Prev      = tnode;
         _size++;
     }
 }
Example #5
0
            //追加到index位置之后
            public void Append(int index, T t)
            {
                BdNode <T> inode;

                if (index == 0)
                {
                    inode = _linkHead;
                }
                else
                {
                    index = index - 1;
                    if (index < 0)
                    {
                        throw new IndexOutOfRangeException("位置不存在");
                    }
                    inode = GetNode(index);
                }
                BdNode <T> tnode = new BdNode <T>(t, inode, inode.Next);

                inode.Next.Prev = tnode;
                inode.Next      = tnode;
                _size++;
            }
Example #6
0
 public BdNode(T val, BdNode <T> prev, BdNode <T> next)
 {
     this.Data = val;
     this.Prev = prev;
     this.Next = next;
 }