- public classDoubleLink
- {
- //表头
- private readonlyBdNode _linkHead;
- //节点个数
- private int _size;
- public DoubleLink()
- {
- _linkHead =newBdNode(default(T),null,null);//双向链表 表头为空_linkHead.Prev = _linkHead;
- _linkHead.Next = _linkHead;
- _size =0;
- }
- public intGetSize() => _size;
- public boolIsEmpty() => (_size ==0);
- //通过索引查找
- privateBdNode GetNode(int index)
- {
- if(index <0|| index >= _size)
- throw newIndexOutOfRangeException("索引溢出或者链表为空");
- if(index < _size /2)//正向查找
- {
- BdNode node = _linkHead.Next;
- for(inti =0; i < index; i++)
- node = node.Next;
- return node;
- }
- //反向查找BdNode rnode = _linkHead.Prev;
- intrindex = _size - index -1;
- for(inti =0; i < rindex; i++)
- rnode = rnode.Prev;
- return rnode;
- }
- publicT Get(intindex) => GetNode(index).Data;
- publicT GetFirst() => GetNode(0).Data;
- publicT GetLast() => GetNode(_size -1).Data;
- // 将节点插入到第index位置之前
- public voidInsert(int index, T t)
- {
- if(_size <1|| index >= _size)
- throw newException("没有可插入的点或者索引溢出了");
- if(index ==0)
- Append(_size, t);
- else
- {
- BdNode inode = GetNode(index);
- BdNode tnode = newBdNode(t, inode.Prev, inode);
- inode.Prev.Next = tnode;
- inode.Prev = tnode;
- _size++;
- }
- }
- //追加到index位置之后
- public voidAppend(int index, T t)
- {
- BdNode inode;
- if(index ==0)
- inode = _linkHead;
- else
- {
- index = index -1;
- if(index <0)
- throw newIndexOutOfRangeException("位置不存在");
- inode = GetNode(index);
- }
- BdNode tnode = newBdNode(t, inode, inode.Next);
- inode.Next.Prev = tnode;
- inode.Next = tnode;
- _size++;
- }
- public voidDel(int index)
- {
- BdNode inode = GetNode(index);
- inode.Prev.Next = inode.Next;
- inode.Next.Prev = inode.Prev;
- _size--;
- }
- public voidDelFirst() => Del(0);
- public voidDelLast() => Del(_size -1);
- public void ShowAll()
- {
- Console.WriteLine("******************* 链表数据如下 *******************");
- for(inti =0; i < _size; i++)
- Console.WriteLine("("+ i +")="+ Get(i));
- Console.WriteLine("******************* 链表数据展示完毕 *******************\n");
- }
- }
来源: http://www.bubuko.com/infodetail-1971382.html